Projects
Kolab:16
roundcubemail
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 92
View file
roundcubemail.spec
Changed
@@ -48,15 +48,15 @@ %global logdir /var/log/roundcubemail %global tmpdir /var/lib/roundcubemail -%global rc_version 1.4 -%global rc_rel_suffix rc2.12 +%global rc_version 1.4.1.27 +#%%global rc_rel_suffix rc2.12 %global dot_rel_suffix %{?rc_rel_suffix:.%{rc_rel_suffix}} %global dash_rel_suffix %{?rc_rel_suffix:-%{rc_rel_suffix}} Name: roundcubemail -Version: 1.4 +Version: 1.4.1.27 -Release: 312%{?dot_rel_suffix}%{?dist} +Release: 1%{?dot_rel_suffix}%{?dist} Summary: Round Cube Webmail is a browser-based multilingual IMAP client @@ -76,8 +76,6 @@ Source200: 2017111400.sql -Patch0001: 0001-fix-sieve-fatal-error.patch - Patch201: default-configuration.patch Patch202: roundcubemail-1.4-beta86-plugin-enigma-homedir.patch @@ -125,14 +123,14 @@ %endif %if "%{_arch}" != "ppc64" && "%{_arch}" != "ppc64le" && 0%{?suse_version} < 1 -BuildRequires: python-cssmin +BuildRequires: python%{?python3_pkgversion}-cssmin %endif # This can, regrettably, not be BuildRequires'ed, since the OSC # command-line so epicly fails at downloading as large a chunk of data. #BuildRequires: firefox -BuildRequires: python -BuildRequires: python-nose +BuildRequires: python%{?python3_pkgversion} +BuildRequires: python%{?python3_pkgversion}-nose #BuildRequires: python-selenium Requires: %{name}(core) = %{?epoch:%{epoch}:}%{version}-%{release} @@ -1518,8 +1516,6 @@ cp -vf %{SOURCE102} plugins/password/config.inc.php.dist %endif -%patch0001 -p1 - %patch201 -p1 %if 0%{?plesk} < 1 %patch202 -p1 @@ -3438,6 +3434,9 @@ %defattr(-,root,root,-) %changelog +* Wed Dec 4 2019 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 1.4.1.27-1 +- Check in 27 revisions ahead of upstream 1.4.1 release + * Mon Oct 7 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 1.4-312.rc2.12 - Check in 12 revisions ahead of upstream 1.4-rc2 release
View file
0001-fix-sieve-fatal-error.patch
Deleted
@@ -1,81 +0,0 @@ -commit 1d9ddf9d336f7b903fd2748350d07c1366b92f41 -Author: Aleksander Machniak <alec@alec.pl> -Date: Tue Oct 8 21:25:30 2019 +0200 - - Fix PHP Fatal error: Uncaught Error: Using $this when not in object (#6959) - -diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php -index da39cebd1..7c74d6988 100644 ---- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php -+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php -@@ -2237,7 +2237,7 @@ class rcube_sieve_engine - 'type' => 'text', - 'name' => '_action_interval[' . $id . ']', - 'id' => 'action_interval' . $id, -- 'value' => rcube_sieve_vacation::vacation_interval($action), -+ 'value' => rcube_sieve_vacation::vacation_interval($action, $this->exts), - 'size' => 2, - 'class' => $this->error_class($id, 'action', 'interval', 'action_interval'), - )); -diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php -index 931750110..bcb62735d 100644 ---- a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php -+++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php -@@ -125,7 +125,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine - return $this->sieve->error(); - } - -- private function vacation_rule() -+ protected function vacation_rule() - { - if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) { - return; -@@ -164,7 +164,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine - $this->vacation['list'] = $list; - } - -- private function vacation_post() -+ protected function vacation_post() - { - if (empty($_POST)) { - return; -@@ -388,7 +388,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine - } - } - -- $interval_txt = $interval->show(self::vacation_interval($this->vacation)); -+ $interval_txt = $interval->show(self::vacation_interval($this->vacation, $this->exts)); - if ($seconds_extension) { - $interval_select = new html_select(array('name' => 'vacation_interval_type')); - $interval_select->add($this->plugin->gettext('days'), 'days'); -@@ -521,7 +521,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine - return $out; - } - -- public static function build_regexp_tests($date_from, $date_to, &$error) -+ protected static function build_regexp_tests($date_from, $date_to, &$error) - { - $tests = array(); - $dt_from = rcube_utils::anytodatetime($date_from); -@@ -562,7 +562,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine - return $tests; - } - -- public static function parse_regexp_tests($tests) -+ protected static function parse_regexp_tests($tests) - { - $rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/'; - $rx_to = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/'; -@@ -588,10 +588,10 @@ class rcube_sieve_vacation extends rcube_sieve_engine - /** - * Get current vacation interval - */ -- public static function vacation_interval(&$vacation) -+ public static function vacation_interval(&$vacation, $extensions = array()) - { - $rcube = rcube::get_instance(); -- $seconds_extension = in_array('vacation-seconds', $this->exts); -+ $seconds_extension = in_array('vacation-seconds', $extensions); - - if (isset($vacation['seconds'])) { - $interval = $vacation['seconds'];
View file
debian.changelog
Changed
@@ -1,3 +1,9 @@ +roundcubemail (1.4.1.27-0~kolab1) unstable; urgency=low + + * Check in 27 revisions ahead of upstream 1.4.1 release + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Wed, 4 Dec 2019 11:11:11 +0200 + roundcubemail (1.4-0~kolab316) unstable; urgency=low * change ownershow of /var/lib/roundcubemail to www-data group instead of adm
View file
debian.series
Changed
@@ -1,3 +1,2 @@ default-configuration.patch -p1 roundcubemail-1.4-beta86-plugin-enigma-homedir.patch -p1 -0001-fix-sieve-fatal-error.patch -p1
View file
roundcubemail-1.4-rc2.12.tar.gz/autogen.sh
Deleted
@@ -1,15 +0,0 @@ -#!/bin/bash - -git clean -d -f -x - -bin/install-jsdeps.sh -bin/install-jsdeps.sh - -pushd .. - -rm -rf roundcubemail-$1/ -cp -a roundcubemail.git roundcubemail-$1/ -rm -rf roundcubemail-$1/.git/ - -tar czvf roundcubemail-$1.tar.gz roundcubemail-$1 -
View file
roundcubemail-1.4-rc2.12.tar.gz/CHANGELOG -> roundcubemail-1.4.1.27.tar.gz/CHANGELOG
Changed
@@ -1,11 +1,59 @@ CHANGELOG Roundcube Webmail =========================== +- Managesieve: Replace "Filter disabled" with "Filter enabled" (#7028) +- Managesieve: Fix so modifier type select wasn't hidden after hiding modifier select on header change +- Managesieve: Fix filter selection after removing a first filter (#7079) +- Password: Fix kpasswd and smb drivers' double-escaping bug (#7092) +- Enigma: Add script to import keys from filesystem to the db storage (for multihost) +- Installer: Fix DB Write test on SQLite database ("database is locked" error) (#7064) +- Installer: Fix so SQLite DSN with a relative path to the database file works in Installer +- Elastic: Fix contrast of warning toasts (#7058) +- Fix so type attribute on script tags is not used on HTML5 pages (#6975) +- Fix unread count after purge on a folder that is not currently selected (#7051) +- Fix bug where Enter key didn't work on messages list in "List" layout (#7052) +- Fix bug where deleting a saved search in addressbook caused display issue on sources/groups list (#7061) +- Fix bug where a new saved search added after removing all searches wasn't added to the list (#7061) +- Fix bug where a new contact group added after removing all groups from addressbook wasn't added to the list +- Fix bug where Ctype extension wasn't required in Installer and INSTALL file (#7049) +- Fix so install-jsdeps.sh removes Bootstrap's sourceMappingURL (#7035) +- Fix so use of Ctrl+A does not scroll the list (#7020) +- Fix/remove useless keyup event handler on username input in logon form (#6970) +- Fix bug where cancelling switching from HTML to plain text didn't set the flag properly (#7077) +- Fix bug where HTML reply could add an empty line with extra indentation above the original message (#7088) + +RELEASE 1.4.1 +------------- +- Elastic: Change HTML editor widget to improve form flow (#6992) +- Elastic: Fix position of mobile floating action button (#7038) +- Managesieve: Fix locked UI after opening filter frame (#7007) +- Fix PHP warning: "array_merge(): Expected parameter 2 to be an array, null given in sendmail.inc (#7003) +- Fix bug where cache keys could exceed length limit specified in db schema (#7004) +- Fix invalid Signature button state after escaping Mailvelope mode (#7015) +- Fix so 401 error is returned only on failed logon requests (#7010) +- Fix db_prefix handling in queries with `TRUNCATE TABLE <name>` and `UNIQUE <name>` (#7013) +- Fix so update.sh script warns about changed defaults (#7011) +- Fix tables listing routine when DSN contained a database with unsupported suffix (#7034) +- Fix so Elastic is also a default in jqueryui plugin (#7039) +- Fix bug where the Installer would not warn about required schema upgrade (#7042) + +RELEASE 1.4.0 +------------- - Elastic: Resizeable columns (#6929) - Elastic: Fix position and style of auto-complete dropdown on small screens (#6951) +- Elastic: Fix initial focus on recipients input in mail compose screen +- Elastic: Fix inserting responses at cursor position (#6971) +- Elastic: Fix unread filter icon and search state on folder change (#6978) +- Elastic: Fix regression where Encrypt button wasn't displayed in mail compose toolbar (#6982) +- Elastic: Fix regression where recipient input didn't update internal input state (#6988) +- Enigma: Fix bug where signing option was set to disabled after saving a draft in Elastic skin (#6515) - Redis: Improve error handling and phpredis 5.X support (#6888) +- Archive: Fix bug where next email was not displayed after Archive button use (#6965) +- Archive: Fix missing Archive icon in folder selector popup in Elastic - Fix bug where cache keys were not case-sensitive on MySQL/MSSQL (#6942) -- Fix so an error is loogged when encryption fails (#6948) +- Fix so an error is logged when encryption fails (#6948) +- Fix bug where inline images could have been ignored if Content-Id header contained redundant spaces (#6980) +- Fix and document skin_logo setup (#6981) RELEASE 1.4-rc2 ---------------
View file
roundcubemail-1.4-rc2.12.tar.gz/INSTALL -> roundcubemail-1.4.1.27.tar.gz/INSTALL
Changed
@@ -12,7 +12,7 @@ * An IMAP, HTTP and SMTP server * .htaccess support allowing overrides for DirectoryIndex * PHP Version 5.4 or greater including: - - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required) + - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring, Ctype (required) - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required) - Iconv, Zip, Fileinfo, Intl, Exif (recommended) - LDAP for LDAP addressbook support (optional) @@ -44,7 +44,9 @@ INSTALLATION ============ -1. Decompress and put this folder somewhere inside your document root +1. Decompress and put this folder somewhere inside your document root. + Note: Make sure files have proper owner/group for your setup. If you use + tar command `--no-same-owner` option might be helpful. 2. In case you don't use the so-called "complete" release package, you have to install PHP and javascript dependencies. 2.1. Install PHP dependencies using composer: @@ -63,7 +65,8 @@ 5. Point your browser to http://url-to-roundcube/installer/ 6. Follow the instructions of the install script (or see MANUAL CONFIGURATION) 7. After creating and testing the configuration, remove the installer directory -8. If you use git sources compile css files for the Elastic skin: +8. If you use git sources compile css files for the Elastic skin (required + lessc >= 1.5.0): $ cd skins/elastic $ lessc -x styles/styles.less > styles/styles.css $ lessc -x styles/print.less > styles/print.css @@ -77,7 +80,7 @@ IMPORTANT! Read all comments in defaults.inc.php, understand them and configure your installation to be not surprised by default behaviour. -Roundcube writes internal errors to the 'errors' log file located in the logs +Roundcube writes internal errors to the 'errors.log' log file located in the logs directory which can be configured in config/config.inc.php. If you want ordinary PHP errors to be logged there as well, set error_log in php.ini or .htaccess file.
View file
roundcubemail-1.4-rc2.12.tar.gz/README.md -> roundcubemail-1.4.1.27.tar.gz/README.md
Changed
@@ -4,13 +4,6 @@ [![Build Status](https://api.travis-ci.org/roundcube/roundcubemail.svg?branch=master)](https://travis-ci.org/roundcube/roundcubemail) -ATTENTION ---------- -This is just a snapshot from the GIT repository and is **NOT A STABLE -version of Roundcube**. It's not recommended to replace an existing installation -of Roundcube with this version. Also using a separate database for this -installation is highly recommended. - INTRODUCTION ------------ @@ -25,9 +18,6 @@ It includes a custom framework with an IMAP library derived from [IlohaMail][iloha] and requires a set of external libraries (see composer.json and jsdeps.json files). -The current default skin 'Larry' was kindly created by FLINT / Büro für -Gestaltung, Berne, Switzerland. - INSTALLATION ------------
View file
roundcubemail-1.4-rc2.12.tar.gz/UPGRADING -> roundcubemail-1.4.1.27.tar.gz/UPGRADING
Changed
@@ -14,18 +14,20 @@ ./bin/installto.sh <TARGET-FOLDER> -For <TARGET-FOLDER> you specify the path to the Roundcube installation -which should be updated. The update script will then copy all new files to the +For <TARGET-FOLDER> you specify the path to the Roundcube installation +which should be updated. The update script will then copy all new files to the target location and check and update the configuration and database schema. -After all is done, the temporary folder with the new Roundcube files can be +After all is done, the temporary folder with the new Roundcube files can be removed again. +WARNING: Make sure files have proper owner/group for your setup. If you use + tar to extract the package, `--no-same-owner` option might be helpful. WARNING: See Post-Upgrade Activities section below. Updating manually ----------------- -If you don't have shell access to the Roundcube installation or if not running +If you don't have shell access to the Roundcube installation or if not running it on a unix system, you need to do the following operations by hand: 1. Replace index.php and all files in @@ -53,7 +55,8 @@ - run `php composer.phar install --no-dev`. 4c. If you use git sources or the release package without dependencies update javascript dependencies by executing `bin/install-jsdeps.sh` script. -4d. If you use git sources compile css files for the Elastic skin: +4d. If you use git sources compile css files for the Elastic skin (required + lessc >= 1.5.0): $ cd skins/elastic $ lessc -x styles/styles.less > styles/styles.css $ lessc -x styles/print.less > styles/print.css
View file
roundcubemail-1.4-rc2.12.tar.gz/bin/install-jsdeps.sh -> roundcubemail-1.4.1.27.tar.gz/bin/install-jsdeps.sh
Changed
@@ -237,7 +237,7 @@ echo "Extracting files $pattern into $destdir\n"; exec(sprintf('%s -o %s %s -d %s', $UNZIP, escapeshellarg($srcfile), escapeshellarg($pattern), $destdir), $out, $retval); if ($retval !== 0) { - rcube::raise_error("Failed to unpack $pattern; " . join('; ' . $out)); + rcube::raise_error("Failed to unpack $pattern; " . implode('; ' . $out)); } } } @@ -258,22 +258,35 @@ foreach ($package['map'] as $src => $dest) { echo "Installing $sourcedir/$src into $destdir/$dest\n"; + $dest_file = $destdir . '/' . $dest; + $src_file = $sourcedir . '/' . $src; + // make sure the destination's parent directory exists if (strpos($dest, '/') !== false) { - $parentdir = dirname($destdir . '/' . $dest); + $parentdir = dirname($dest_file); if (!is_dir($parentdir)) { mkdir($parentdir, 0775, true); } } // avoid copying source directory as a child into destination - if (is_dir($sourcedir . '/' . $src) && is_dir($destdir . '/' . $dest)) { - exec(sprintf('rm -rf %s/%s', $destdir, $dest)); + if (is_dir($src_file) && is_dir($dest_file)) { + exec(sprintf('rm -rf %s', $dest_file)); } - exec(sprintf('mv -f %s/%s %s/%s', $sourcedir, $src, $destdir, $dest), $out, $retval); + exec(sprintf('mv -f %s %s', $src_file, $dest_file), $out, $retval); if ($retval !== 0) { - rcube::raise_error("Failed to move $src into $destdir/$dest; " . join('; ' . $out)); + rcube::raise_error("Failed to move $src into $dest_file; " . implode('; ' . $out)); + } + // Remove sourceMappingURL + else if (isset($package['sourcemap']) && $package['sourcemap'] === false) { + if ($content = file($dest_file)) { + $index = count($content); + if (preg_match('|sourceMappingURL=|', $content[$index-1])) { + array_pop($content); + file_put_contents($dest_file, implode('', $content)); + } + } } } @@ -285,7 +298,7 @@ echo "Extracting zip archive into $destdir\n"; exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $destdir), $out, $retval); if ($retval !== 0) { - rcube::raise_error("Failed to unzip $srcfile; " . join('; ' . $out)); + rcube::raise_error("Failed to unzip $srcfile; " . implode('; ' . $out)); } }
View file
roundcubemail-1.4-rc2.12.tar.gz/bin/installto.sh -> roundcubemail-1.4.1.27.tar.gz/bin/installto.sh
Changed
@@ -34,7 +34,7 @@ // read version from iniset.php $iniset = @file_get_contents($target_dir . '/program/include/iniset.php'); -if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m)) +if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z0-9-]*)/', $iniset, $m)) rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true); $oldversion = $m[1];
View file
roundcubemail-1.4-rc2.12.tar.gz/bin/update.sh -> roundcubemail-1.4.1.27.tar.gz/bin/update.sh
Changed
@@ -29,7 +29,7 @@ if (!$opts['version']) { echo "What version are you upgrading from? Type '?' if you don't know.\n"; - if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z-]*$/', $input)) { + if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z0-9-]*$/', $input)) { $opts['version'] = $input; } else { @@ -43,7 +43,7 @@ if ($RCI->configured) { $success = true; - if (($messages = $RCI->check_config()) || $RCI->legacy_config) { + if (($messages = $RCI->check_config($opts['version'])) || $RCI->legacy_config) { $success = false; $err = 0; @@ -56,8 +56,6 @@ echo "- '" . $msg['prop'] . "' was replaced by '" . $msg['replacement'] . "'\n"; $err++; } - - echo "\n"; } // list obsolete config options (just a notice) @@ -70,8 +68,6 @@ echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n"; $err++; } - - echo "\n"; } if (!$err && $RCI->legacy_config) { @@ -137,6 +133,15 @@ } } + // list of config options with changed default (just a notice) + if (!empty($messages['defaults'])) { + echo "WARNING: Changed defaults (These config options have new default values):\n"; + + foreach ($messages['defaults'] as $opt) { + echo "- '{$opt}'\n"; + } + } + // check dependencies based on the current configuration if (is_array($messages['dependencies'])) { echo "WARNING: Dependency check failed!\n";
View file
roundcubemail-1.4-rc2.12.tar.gz/config/config.inc.php.sample -> roundcubemail-1.4.1.27.tar.gz/config/config.inc.php.sample
Changed
@@ -40,8 +40,8 @@ $config['default_host'] = 'localhost'; // SMTP server host (for sending mails). -// Enter hostname with prefix tls:// to use STARTTLS, or use -// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS) +// Enter hostname with prefix ssl:// to use Implicit TLS, or use +// prefix tls:// to use STARTTLS. // Supported replacement variables: // %h - user's IMAP hostname // %n - hostname ($_SERVER['SERVER_NAME']) @@ -51,8 +51,7 @@ // For example %n = mail.domain.tld, %t = domain.tld $config['smtp_server'] = 'localhost'; -// SMTP port (default is 25; use 587 for STARTTLS or 465 for the -// deprecated SSL over SMTP (aka SMTPS)) +// SMTP port. Use 25 for cleartext, 465 for Implicit TLS, or 587 for STARTTLS (default) $config['smtp_port'] = 587; // SMTP username (if required) if you use %u as the username Roundcube @@ -83,4 +82,4 @@ ); // skin name: folder from skins/ -$config['skin'] = 'larry'; +$config['skin'] = 'elastic';
View file
roundcubemail-1.4-rc2.12.tar.gz/config/defaults.inc.php -> roundcubemail-1.4.1.27.tar.gz/config/defaults.inc.php
Changed
@@ -257,8 +257,8 @@ // ---------------------------------- // SMTP server host (for sending mails). -// Enter hostname with prefix tls:// to use STARTTLS, or use -// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS) +// Enter hostname with prefix ssl:// to use Implicit TLS, or use +// prefix tls:// to use STARTTLS. // Supported replacement variables: // %h - user's IMAP hostname // %n - hostname ($_SERVER['SERVER_NAME']) @@ -268,7 +268,7 @@ // For example %n = mail.domain.tld, %t = domain.tld $config['smtp_server'] = 'localhost'; -// SMTP port (default is 587) +// SMTP port. Use 25 for cleartext, 465 for Implicit TLS, or 587 for STARTTLS (default) $config['smtp_port'] = 587; // SMTP username (if required) if you use %u as the username Roundcube @@ -390,16 +390,37 @@ // PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! $config['support_url'] = ''; -// replace Roundcube logo with this image -// specify an URL relative to the document root of this Roundcube installation -// an array can be used to specify different logos for specific template files -// '*' for default logo -// ':favicon' for favicon -// ':print' for logo on all print templates (e.g. messageprint, contactprint) -// ':small' for small screen logo in Elastic -// different logos can be specified for different skins by prefixing the skin name to the array key -// config applied in order: <skin>:<template>, <skin>:*, <template>, * -// for example array("*" => "/images/roundcube_logo.png", "messageprint" => "/images/roundcube_logo_print.png", "elastic:*" => "/images/logo.png") +// Logo image replacement. Specifies location of the image as: +// - URL relative to the document root of this Roundcube installation +// - full URL with http:// or https:// prefix +// - URL relative to the current skin folder (when starts with a '/') +// +// An array can be used to specify different logos for specific template files +// The array key specifies the place(s) the logo should be applied to and +// is made up of (up to) 3 parts: +// - skin name prefix (always with colon, can be replaced with *) +// - template name (or * for all templates) +// - logo type - it is used for logos used on multiple templates +// the available types include '[favicon]' for favicon, '[print]' for logo on all print +// templates (e.g. messageprint, contactprint) and '[small]' for small screen logo in supported skins +// +// Example config for skin_logo +/* + array( + // show the image /images/logo_login_small.png for the Login screen in the Elastic skin on small screens + "elastic:login[small]" => "/images/logo_login_small.png", + // show the image /images/logo_login.png for the Login screen in the Elastic skin + "elastic:login" => "/images/logo_login.png", + // show the image /images/logo_small.png in the Elastic skin + "elastic:*[small]" => "/images/logo_small.png", + // show the image /images/larry.png in the Larry skin + "larry:*" => "/images/larry.png", + // show the image /images/logo_login.png on the login template in all skins + "login" => "/images/logo_login.png", + // show the image /images/logo_print.png for all print type logos in all skins + "[print]" => "/images/logo_print.png", + ); +*/ $config['skin_logo'] = null; // automatically create a new Roundcube user when log-in the first time. @@ -1059,7 +1080,7 @@ $config['default_charset'] = 'ISO-8859-1'; // skin name: folder from skins/ -$config['skin'] = 'larry'; +$config['skin'] = 'elastic'; // limit skins available/shown in the settings section $config['skins_allowed'] = array();
View file
roundcubemail-1.4-rc2.12.tar.gz/index.php -> roundcubemail-1.4.1.27.tar.gz/index.php
Changed
@@ -2,7 +2,7 @@ /** +-------------------------------------------------------------------------+ | Roundcube Webmail IMAP Client | - | Version 1.4-git | + | Version 1.4.1 | | | | Copyright (C) The Roundcube Dev Team | | | @@ -234,7 +234,8 @@ $plugin = $RCMAIL->plugins->exec_hook('unauthenticated', array( 'task' => 'login', 'error' => $session_error, - 'http_code' => !$session_error ? 401 : 200 + // Return 401 only on failed logins (#7010) + 'http_code' => empty($session_error) && !empty($error_message) ? 401 : 200 )); $RCMAIL->set_task($plugin['task']);
View file
roundcubemail-1.4-rc2.12.tar.gz/installer/check.php -> roundcubemail-1.4.1.27.tar.gz/installer/check.php
Changed
@@ -31,6 +31,7 @@ 'PDO' => 'PDO', 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', + 'Ctype' => 'ctype', ); $optional_php_exts = array( @@ -87,6 +88,7 @@ 'GD' => 'http://www.php.net/manual/en/book.image.php', 'Imagick' => 'http://www.php.net/manual/en/book.imagick.php', 'Zip' => 'http://www.php.net/manual/en/book.zip.php', + 'Ctype' => 'http://www.php.net/manual/en/book.ctype.php', 'pdo_mysql' => 'http://www.php.net/manual/en/ref.pdo-mysql.php', 'pdo_pgsql' => 'http://www.php.net/manual/en/ref.pdo-pgsql.php', 'pdo_sqlite' => 'http://www.php.net/manual/en/ref.pdo-sqlite.php',
View file
roundcubemail-1.4-rc2.12.tar.gz/installer/index.php -> roundcubemail-1.4.1.27.tar.gz/installer/index.php
Changed
@@ -3,7 +3,7 @@ /** +-------------------------------------------------------------------------+ | Roundcube Webmail setup tool | - | Version 1.4-git | + | Version 1.4.1 | | | | Copyright (C) The Roundcube Dev Team | | |
View file
roundcubemail-1.4-rc2.12.tar.gz/installer/test.php -> roundcubemail-1.4.1.27.tar.gz/installer/test.php
Changed
@@ -152,15 +152,15 @@ // initialize db with schema found in /SQL/* if ($db_working && $_POST['initdb']) { - if (!($success = $RCI->init_db($DB))) { + if (!$RCI->init_db($DB)) { $db_working = false; echo '<p class="warning">Please try to inizialize the database manually as described in the INSTALL guide. - Make sure that the configured database extists and that the user as write privileges</p>'; + Make sure that the configured database extists and that the user as write privileges</p>'; } } else if ($db_working && $_POST['updatedb']) { - if (!($success = $RCI->update_db($_POST['version']))) { + if (!$RCI->update_db($_POST['version'])) { echo '<p class="warning">Database schema update failed.</p>'; } } @@ -189,6 +189,9 @@ // more database tests if ($db_working) { + // Using transactions to workaround SQLite bug (#7064) + $DB->startTransaction(); + // write test $insert_id = md5(uniqid()); $db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session') @@ -204,6 +207,9 @@ } echo '<br />'; + // Transaction end + $DB->rollbackTransaction(); + // check timezone settings $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db'; $tz_db = $DB->query($tz_db);
View file
roundcubemail-1.4-rc2.12.tar.gz/jsdeps.json -> roundcubemail-1.4.1.27.tar.gz/jsdeps.json
Changed
@@ -94,6 +94,7 @@ "sha1": "ee9e9d6bbbb6181dc519778af2b38804a6aa62a4", "license": "MIT", "flat": true, + "sourcemap": false, "map": { "bootstrap.bundle.min.js": "bootstrap.bundle.min.js", "bootstrap.min.css": "bootstrap.min.css"
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/acl/tests/Acl.php -> roundcubemail-1.4.1.27.tar.gz/plugins/acl/tests/Acl.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new acl($rcube->api); + $plugin = new acl($rcube->plugins); $this->assertInstanceOf('acl', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php -> roundcubemail-1.4.1.27.tar.gz/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new additional_message_headers($rcube->api); + $plugin = new additional_message_headers($rcube->plugins); $this->assertInstanceOf('additional_message_headers', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/archive/archive.js -> roundcubemail-1.4.1.27.tar.gz/plugins/archive/archive.js
Changed
@@ -26,14 +26,15 @@ if (!post_data._uid) return; - rcmail.show_contentframe(false); - // Disable message command buttons until a message is selected rcmail.enable_command(rcmail.env.message_commands, false); rcmail.enable_command('plugin.archive', false); // let the server sort the messages to the according subfolders rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive'); + + // Reset preview (must be after with_selected_messages() call) + rcmail.show_contentframe(false); } function rcmail_is_archive() @@ -65,16 +66,16 @@ else li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true); - if (li) { + if (li) $(li).addClass('archive'); - // in folder selector popup - rcmail.addEventListener('menu-open', function(p) { - if (p.name == 'folder-selector') { - $('a[rel="' + $('a', li).attr('rel') + '"]', p.obj).parent().addClass('archive'); - } - }); - } + // in folder selector popup + rcmail.addEventListener('menu-open', function(p) { + if (p.name == 'folder-selector') { + var search = rcmail.env.archive_folder; + $('a', p.obj).filter(function() { return $(this).data('id') == search; }).parent().addClass('archive'); + } + }); } }); }
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/archive/composer.json -> roundcubemail-1.4.1.27.tar.gz/plugins/archive/composer.json
Changed
@@ -3,7 +3,7 @@ "type": "roundcube-plugin", "description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.", "license": "GPLv3+", - "version": "3.3", + "version": "3.4", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/archive/tests/Archive.php -> roundcubemail-1.4.1.27.tar.gz/plugins/archive/tests/Archive.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new archive($rcube->api); + $plugin = new archive($rcube->plugins); $this->assertInstanceOf('archive', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4.1.27.tar.gz/plugins/attachment_reminder/tests
Added
+(directory)
View file
roundcubemail-1.4.1.27.tar.gz/plugins/attachment_reminder/tests/AttachmentReminder.php
Added
@@ -0,0 +1,23 @@ +<?php + +class AttachmentReminder_Plugin extends PHPUnit_Framework_TestCase +{ + + function setUp() + { + include_once __DIR__ . '/../attachment_reminder.php'; + } + + /** + * Plugin object construction test + */ + function test_constructor() + { + $rcube = rcube::get_instance(); + $plugin = new attachment_reminder($rcube->plugins); + + $this->assertInstanceOf('attachment_reminder', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} +
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/autologon/tests/Autologon.php -> roundcubemail-1.4.1.27.tar.gz/plugins/autologon/tests/Autologon.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new autologon($rcube->api); + $plugin = new autologon($rcube->plugins); $this->assertInstanceOf('autologon', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/database_attachments/tests/DatabaseAttachments.php -> roundcubemail-1.4.1.27.tar.gz/plugins/database_attachments/tests/DatabaseAttachments.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new database_attachments($rcube->api); + $plugin = new database_attachments($rcube->plugins); $this->assertInstanceOf('database_attachments', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/debug_logger/tests/DebugLogger.php -> roundcubemail-1.4.1.27.tar.gz/plugins/debug_logger/tests/DebugLogger.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new debug_logger($rcube->api); + $plugin = new debug_logger($rcube->plugins); $this->assertInstanceOf('debug_logger', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/emoticons/tests/Emoticons.php -> roundcubemail-1.4.1.27.tar.gz/plugins/emoticons/tests/Emoticons.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new emoticons($rcube->api); + $plugin = new emoticons($rcube->plugins); $this->assertInstanceOf('emoticons', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4.1.27.tar.gz/plugins/enigma/bin
Added
+(directory)
View file
roundcubemail-1.4.1.27.tar.gz/plugins/enigma/bin/import_keys.sh
Added
@@ -0,0 +1,188 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | This file is part of the Roundcube Webmail client | + | | + | Copyright (C) The Roundcube Dev Team | + | Copyright (C) Kolab Systems AG | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Import keys from Enigma's homedir into database for multihost | + | support. | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/../../../') . '/'); + +require INSTALL_PATH . 'program/include/clisetup.php'; + +$rcmail = rcube::get_instance(); + +// get arguments +$args = rcube_utils::get_opt(array( + 'u' => 'user', + 'h' => 'host', + 'd' => 'dir', + 'x' => 'dry-run', +)); + +if ($_SERVER['argv'][1] == 'help') { + print_usage(); + exit; +} + +if (empty($args['dir'])) { + rcube::raise_error("--dir argument is required", true); +} + +$host = get_host($args); +$dirs = array(); + +// Read the homedir and iterate over all subfolders (as users) +if (empty($args['user'])) { + if ($dh = opendir($args['dir'])) { + while (($dir = readdir($dh)) !== false) { + if ($dir != '.' && $dir != '..') { + $dirs[$args['dir'] . '/' . $dir] = $dir; + } + } + closedir($dh); + } +} +// a single user +else { + $dirs = array($args['dir'] => $args['user']); +} + +foreach ($dirs as $dir => $user) { + echo "Importing keys from $dir\n"; + + if ($user_id = get_user_id($user, $host)) { + reset_state($user_id, !empty($args['dry-run'])); + import_dir($user_id, $dir, !empty($args['dry-run'])); + } +} + + +function print_usage() +{ + print "Usage: import.sh [options]\n"; + print "Options:\n"; + print " --user=username User, if not set --dir subfolders will be iterated\n"; + print " --host=host The IMAP hostname or IP the given user is related to\n"; + print " --dir=path Location of the gpg homedir\n"; + print " --dry-run Do nothing, just list found user/files\n"; +} + +function get_host($args) +{ + global $rcmail; + + if (empty($args['host'])) { + $hosts = $rcmail->config->get('default_host', ''); + if (is_string($hosts)) { + $args['host'] = $hosts; + } + else if (is_array($hosts) && count($hosts) == 1) { + $args['host'] = reset($hosts); + } + else { + rcube::raise_error("Specify a host name", true); + } + + // host can be a URL like tls://192.168.12.44 + $host_url = parse_url($args['host']); + if ($host_url['host']) { + $args['host'] = $host_url['host']; + } + } + + return $args['host']; +} + +function get_user_id($username, $host) +{ + global $rcmail; + + $db = $rcmail->get_dbh(); + + // find user in local database + $user = rcube_user::query($username, $host); + + if (empty($user)) { + rcube::raise_error("User does not exist: $username"); + } + + return $user->ID; +} + +function reset_state($user_id, $dry_run = false) +{ + global $rcmail; + + if ($dry_run) { + return; + } + + $db = $rcmail->get_dbh(); + + $db->query("DELETE FROM " . $db->table_name('filestore', true) + . " WHERE `user_id` = ? AND `context` = ?", + $user_id, 'enigma'); +} + +function import_dir($user_id, $dir, $dry_run = false) +{ + global $rcmail; + + $db = $rcmail->get_dbh(); + $table = $db->table_name('filestore', true); + $db_files = array('pubring.gpg', 'secring.gpg', 'pubring.kbx'); + $maxsize = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000; + + foreach (glob("$dir/private-keys-v1.d/*.key") as $file) { + $db_files[] = substr($file, strlen($dir) + 1); + } + + foreach ($db_files as $file) { + if ($mtime = @filemtime("$dir/$file")) { + $data = file_get_contents("$dir/$file"); + $data = base64_encode($data); + $datasize = strlen($data); + + if ($datasize > $maxsize) { + rcube::raise_error(array( + 'code' => 605, 'line' => __LINE__, 'file' => __FILE__, + 'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet." + ), true, false); + + continue; + } + + echo "* $file\n"; + + if ($dry_run) { + continue; + } + + $result = $db->query( + "INSERT INTO $table (`user_id`, `context`, `filename`, `mtime`, `data`)" + . " VALUES(?, 'enigma', ?, ?, ?)", + $user_id, $file, $mtime, $data); + + if ($db->is_error($result)) { + rcube::raise_error(array( + 'code' => 605, 'line' => __LINE__, 'file' => __FILE__, + 'message' => "Enigma: Failed to save $file into database." + ), true, false); + } + } + } +}
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/enigma/enigma.js -> roundcubemail-1.4.1.27.tar.gz/plugins/enigma/enigma.js
Changed
@@ -69,7 +69,7 @@ rcmail.addEventListener('beforesend', function(props) { rcmail.enigma_beforesend_handler(props); }) .addEventListener('beforesavedraft', function(props) { rcmail.enigma_beforesavedraft_handler(props); }); - $('input,label', $('#enigmamenu')).mouseup(function(e) { + $('#enigmamenu').find('input,label').mouseup(function(e) { // don't close the menu on mouse click inside e.stopPropagation(); }); @@ -80,7 +80,7 @@ var opt = this, input = $('#enigma' + opt + 'opt'); if (rcmail.env['enigma_force_' + opt]) { - input.prop('checked', true) + input.prop('checked', true); } // Compose status bar in Elastic @@ -503,7 +503,7 @@ { var form = this.gui_objects.messageform; - // copy inputs from enigma menu to the form + // copy inputs from enigma menu to the form (not used in Elastic) $('#enigmamenu input').each(function() { var id = this.id + '_cpy', input = $('#' + id); @@ -514,11 +514,6 @@ input.val(this.checked ? '1' : ''); }); - - // disable signing when saving drafts - if (this.env.last_action == 'savedraft') { - $('input[name="_enigma_sign"]', form).val(0); - } }; // Import attached keys/certs file
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/enigma/localization/is_IS.inc -> roundcubemail-1.4.1.27.tar.gz/plugins/enigma/localization/is_IS.inc
Changed
@@ -61,5 +61,6 @@ $labels['keygenerating'] = 'Útbý dulritunarlykla...'; $labels['encryptmsg'] = 'Dulrita þessi skilaboð'; $labels['keyimportlabel'] = 'Flytja inn úr skrá'; +$labels['managekeys'] = 'Sýsla með PGP-lykla'; $messages['signerror'] = 'Undirritun mistókst.'; ?>
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/enigma/skins/larry/templates/keys.html -> roundcubemail-1.4.1.27.tar.gz/plugins/enigma/skins/larry/templates/keys.html
Changed
@@ -82,7 +82,7 @@ <roundcube:include file="/includes/footer.html" /> -<script type="text/javascript"> +<script> new rcube_splitter({ id:'enigmakeyssplitter', p1:'#enigmakeyslist', p2:'#enigmacontent-box', orientation:'v', relative:true, start:266, min:180, size:12 }).init(); </script>
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/enigma/tests/Enigma.php -> roundcubemail-1.4.1.27.tar.gz/plugins/enigma/tests/Enigma.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new enigma($rcube->api); + $plugin = new enigma($rcube->plugins); $this->assertInstanceOf('enigma', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/example_addressbook/tests/ExampleAddressbook.php -> roundcubemail-1.4.1.27.tar.gz/plugins/example_addressbook/tests/ExampleAddressbook.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new example_addressbook($rcube->api); + $plugin = new example_addressbook($rcube->plugins); $this->assertInstanceOf('example_addressbook', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/filesystem_attachments/tests/FilesystemAttachments.php -> roundcubemail-1.4.1.27.tar.gz/plugins/filesystem_attachments/tests/FilesystemAttachments.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new filesystem_attachments($rcube->api); + $plugin = new filesystem_attachments($rcube->plugins); $this->assertInstanceOf('filesystem_attachments', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/help/tests/Help.php -> roundcubemail-1.4.1.27.tar.gz/plugins/help/tests/Help.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new help($rcube->api); + $plugin = new help($rcube->plugins); $this->assertInstanceOf('help', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/hide_blockquote/tests/HideBlockquote.php -> roundcubemail-1.4.1.27.tar.gz/plugins/hide_blockquote/tests/HideBlockquote.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new hide_blockquote($rcube->api); + $plugin = new hide_blockquote($rcube->plugins); $this->assertInstanceOf('hide_blockquote', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/http_authentication/tests/HttpAuthentication.php -> roundcubemail-1.4.1.27.tar.gz/plugins/http_authentication/tests/HttpAuthentication.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new http_authentication($rcube->api); + $plugin = new http_authentication($rcube->plugins); $this->assertInstanceOf('http_authentication', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/identicon/tests/Identicon.php -> roundcubemail-1.4.1.27.tar.gz/plugins/identicon/tests/Identicon.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new identicon($rcube->api); + $plugin = new identicon($rcube->plugins); $this->assertInstanceOf('identicon', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/identity_select/tests/IdentitySelect.php -> roundcubemail-1.4.1.27.tar.gz/plugins/identity_select/tests/IdentitySelect.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new identity_select($rcube->api); + $plugin = new identity_select($rcube->plugins); $this->assertInstanceOf('identity_select', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/jqueryui/config.inc.php.dist -> roundcubemail-1.4.1.27.tar.gz/plugins/jqueryui/config.inc.php.dist
Changed
@@ -6,7 +6,7 @@ // map Roundcube skins with jquery-ui themes here $config['jquery_ui_skin_map'] = array( 'larry' => 'larry', - 'default' => 'larry', + 'default' => 'elastic', ); ?>
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/jqueryui/jqueryui.php -> roundcubemail-1.4.1.27.tar.gz/plugins/jqueryui/jqueryui.php
Changed
@@ -18,6 +18,10 @@ private static $features = array(); private static $ui_theme; + private static $skin_map = array( + 'larry' => 'larry', + 'default' => 'elastic', + ); public function init() { @@ -35,9 +39,9 @@ // include UI stylesheet $skin = $rcmail->config->get('skin'); - $ui_map = $rcmail->config->get('jquery_ui_skin_map', array()); + $ui_map = $rcmail->config->get('jquery_ui_skin_map', self::$skin_map); $skins = array_keys($rcmail->output->skins); - $skins[] = 'larry'; + $skins[] = 'elastic'; foreach ($skins as $skin) { self::$ui_theme = $ui_theme = $ui_map[$skin] ?: $skin; @@ -111,7 +115,7 @@ $config_str = rcube_output::json_serialize($config); $rcube->output->include_css('plugins/jqueryui/' . $css); - $rcube->output->add_header(html::tag('script', array('type' => 'text/javascript', 'src' => $script))); + $rcube->output->include_script($script, 'head', false); $rcube->output->add_script('$.fn.miniColors = $.fn.minicolors; $("input.colors").minicolors(' . $config_str . ')', 'docready'); $rcube->output->set_env('minicolors_config', $config); } @@ -137,7 +141,7 @@ $rcube->output->include_css('plugins/jqueryui/' . $css); } - $rcube->output->add_header(html::tag('script', array('type' => "text/javascript", 'src' => $script))); + $rcube->output->include_script($script, 'head', false); } /**
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/jqueryui/tests/Jqueryui.php -> roundcubemail-1.4.1.27.tar.gz/plugins/jqueryui/tests/Jqueryui.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new jqueryui($rcube->api); + $plugin = new jqueryui($rcube->plugins); $this->assertInstanceOf('jqueryui', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/krb_authentication/tests/KrbAuthentication.php -> roundcubemail-1.4.1.27.tar.gz/plugins/krb_authentication/tests/KrbAuthentication.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new krb_authentication($rcube->api); + $plugin = new krb_authentication($rcube->plugins); $this->assertInstanceOf('krb_authentication', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/Changelog -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/Changelog
Changed
@@ -1,3 +1,7 @@ +- Replace "Filter disabled" with "Filter enabled" (#7028) +- Fix so modifier type select wasn't hidden after hiding modifier select on header change +- Fix filter selection after removing a first filter (#7079) + * version 9.3 [2019-04-21] ----------------------------------------------------------- - Use RFC-compliant line endings, CRLF instead of LF (#6686)
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
Changed
@@ -698,7 +698,7 @@ $delheader_op = rcube_utils::get_input_value('_action_delheader_op', rcube_utils::INPUT_POST); $delheader_comp = rcube_utils::get_input_value('_action_delheader_comp', rcube_utils::INPUT_POST); - $this->form['disabled'] = !empty($_POST['_disabled']); + $this->form['disabled'] = empty($_POST['_enabled']); $this->form['join'] = $join == 'allof'; $this->form['name'] = $name; $this->form['tests'] = array(); @@ -1508,7 +1508,7 @@ $_SESSION['managesieve-compact-form'] = $compact; // do not allow creation of new rules - if ($fid == null && in_array('new_rule', $this->disabled_actions)) { + if ($fid === null && in_array('new_rule', $this->disabled_actions)) { $this->rc->output->show_message('managesieve.disabledaction', 'error'); return; } @@ -1556,12 +1556,13 @@ $this->filtersets_list(array('id' => 'sievescriptname'), true) ); } - else if ($compact) { - $out .= sprintf("\n" . '<div class="form-group row form-check">' - . '<label for="disabled" class="col-sm-4 col-form-label">%s</label>' - . '<div class="col-sm-8 form-check"><input type="checkbox" id="disabled" name="_disabled" value="1" /></div></div>', - rcube::Q($this->plugin->gettext('filterdisabled'))); - } + + $out .= sprintf("\n" . '<div class="form-group row form-check">' + . '<label for="fenabled" class="col-sm-4 col-form-label">%s</label>' + . '<div class="col-sm-8 form-check">' + . '<input type="checkbox" id="fenabled" name="_enabled" value="1"' . (empty($scr['disabled']) ? ' checked' : '') . ' />' + . '</div></div>', + rcube::Q($this->plugin->gettext('filterenabled'))); if ($compact) { $select = new html_select(array('name' => '_join', 'id' => '_join', @@ -2237,7 +2238,7 @@ 'type' => 'text', 'name' => '_action_interval[' . $id . ']', 'id' => 'action_interval' . $id, - 'value' => rcube_sieve_vacation::vacation_interval($action), + 'value' => rcube_sieve_vacation::vacation_interval($action, $this->exts), 'size' => 2, 'class' => $this->error_class($id, 'action', 'interval', 'action_interval'), ));
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
Changed
@@ -125,7 +125,7 @@ return $this->sieve->error(); } - private function vacation_rule() + protected function vacation_rule() { if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) { return; @@ -164,7 +164,7 @@ $this->vacation['list'] = $list; } - private function vacation_post() + protected function vacation_post() { if (empty($_POST)) { return; @@ -388,7 +388,7 @@ } } - $interval_txt = $interval->show(self::vacation_interval($this->vacation)); + $interval_txt = $interval->show(self::vacation_interval($this->vacation, $this->exts)); if ($seconds_extension) { $interval_select = new html_select(array('name' => 'vacation_interval_type')); $interval_select->add($this->plugin->gettext('days'), 'days'); @@ -521,7 +521,7 @@ return $out; } - public static function build_regexp_tests($date_from, $date_to, &$error) + protected static function build_regexp_tests($date_from, $date_to, &$error) { $tests = array(); $dt_from = rcube_utils::anytodatetime($date_from); @@ -562,7 +562,7 @@ return $tests; } - public static function parse_regexp_tests($tests) + protected static function parse_regexp_tests($tests) { $rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/'; $rx_to = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/'; @@ -588,10 +588,10 @@ /** * Get current vacation interval */ - public static function vacation_interval(&$vacation) + public static function vacation_interval(&$vacation, $extensions = array()) { $rcube = rcube::get_instance(); - $seconds_extension = in_array('vacation-seconds', $this->exts); + $seconds_extension = in_array('vacation-seconds', $extensions); if (isset($vacation['seconds'])) { $interval = $vacation['seconds'];
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/localization/en_US.inc -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/localization/en_US.inc
Changed
@@ -91,6 +91,7 @@ $labels['fromset'] = 'from set'; $labels['fromfile'] = 'from file'; $labels['filterdisabled'] = 'Filter disabled'; +$labels['filterenabled'] = 'Filter enabled'; $labels['countisgreaterthan'] = 'count is greater than'; $labels['countisgreaterthanequal'] = 'count is greater than or equal to'; $labels['countislessthan'] = 'count is less than';
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/localization/is_IS.inc -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/localization/is_IS.inc
Changed
@@ -20,6 +20,7 @@ $labels['newfilter'] = 'Ný sía'; $labels['filteradd'] = 'Bæta við síu'; $labels['filterdel'] = 'Eyða síu'; +$labels['rules'] = 'Reglur'; $labels['actions'] = 'Aðgerðir'; $labels['scope'] = 'Umfang'; $labels['moveup'] = 'Færa upp'; @@ -31,22 +32,43 @@ $labels['filterisnot'] = 'er ekki jafnt og'; $labels['filterexists'] = 'er til'; $labels['filternotexists'] = 'er ekki til'; +$labels['filterunder'] = 'undir'; +$labels['filterover'] = 'yfir'; $labels['mime'] = 'MIME:'; $labels['mimepart'] = 'MIME part:'; $labels['mime-message'] = 'skilaboð'; +$labels['addrule'] = 'Bæta við reglu'; +$labels['delrule'] = 'Eyða reglu'; +$labels['messagemoveto'] = 'Færa skilaboð í'; +$labels['messageredirect'] = 'Endurbeina skilaboðum til'; $labels['messagecopyto'] = 'Afrita skilaboð í'; +$labels['messagesendcopy'] = 'Senda afrit af skilaboðum til'; $labels['messagedelete'] = 'Eyða skilaboðum'; $labels['add'] = 'Bæta við'; $labels['del'] = 'Eyða'; $labels['sender'] = 'Sendandi'; $labels['recipient'] = 'Viðtakandi'; $labels['vacationaddr'] = 'Tölvupóstföngin mín:'; +$labels['vacationsubject'] = 'Meginmál skilaboða:'; $labels['days'] = 'dagar'; $labels['seconds'] = 'sekúndur'; +$labels['enable'] = 'Gera virkt/óvirkt'; +$labels['active'] = 'virkt'; +$labels['none'] = 'ekkert'; $labels['flagread'] = 'Lesið'; $labels['flagdeleted'] = 'Eytt'; +$labels['flaganswered'] = 'Svarað'; $labels['flagflagged'] = 'Flaggað'; $labels['flagdraft'] = 'Drög'; +$labels['varlower'] = 'lágstafa'; +$labels['varupper'] = 'hástafa'; +$labels['varlowerfirst'] = 'fyrsti stafur lágstafur'; +$labels['varupperfirst'] = 'fyrsti stafur hástafur'; +$labels['varlength'] = 'lengd'; +$labels['notifyimportance'] = 'Mikilvægi:'; +$labels['notifyimportancelow'] = 'lítið'; +$labels['notifyimportancenormal'] = 'venjulegt'; +$labels['notifyimportancehigh'] = 'mikið'; $labels['notifymethodmailto'] = 'Tölvupóstfang'; $labels['notifymethodtel'] = 'Sími'; $labels['notifymethodsms'] = 'SMS'; @@ -78,22 +100,29 @@ $labels['user'] = 'notandi'; $labels['detail'] = 'nánar'; $labels['indexlast'] = 'afturábak'; +$labels['vacation'] = 'Ekki í vinnunni'; $labels['vacation.reply'] = 'Svarskilaboð'; $labels['vacation.advanced'] = 'Flóknari stillingar'; $labels['vacation.subject'] = 'Viðfangsefni'; $labels['vacation.body'] = 'Meginmál'; +$labels['vacation.start'] = 'Upphafstími'; +$labels['vacation.end'] = 'Lokatími'; $labels['vacation.status'] = 'Staða'; $labels['vacation.on'] = 'Kveikt'; $labels['vacation.off'] = 'Slökkt'; +$labels['vacation.addresses'] = 'Tölvupóstföngin mín'; $labels['vacation.saving'] = 'Vista gögn...'; $labels['vacation.keep'] = 'Halda'; $labels['vacation.discard'] = 'Henda'; $labels['vacation.redirect'] = 'Endurbeina til'; $labels['vacation.copy'] = 'Senda afrit á'; +$labels['forward'] = 'Áframsending'; $labels['forward.redirect'] = 'Endurbeina til'; $labels['forward.copy'] = 'Senda afrit á'; $labels['forward.on'] = 'Kveikt'; $labels['forward.off'] = 'Slökkt'; +$labels['forward.status'] = 'Staða:'; $labels['forward.saving'] = 'Vista gögn...'; $labels['message'] = 'Skilaboð'; +$messages['nametoolong'] = 'Nafn er of langt.'; $messages['namereserved'] = 'Nafn er frátekið.';
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/managesieve.js -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/managesieve.js
Changed
@@ -104,9 +104,6 @@ $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); }); } } - - if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled) - $('#disabled').attr('checked', true); }); }; @@ -276,7 +273,7 @@ // update row id if (rowid > id) { - this.uid = rowid - 1; + this.uid = String(rowid - 1); $(this).attr('id', 'rcmrow' + this.uid); } }); @@ -295,7 +292,7 @@ else row.removeClass('disabled'); - $('#disabled', $('iframe').contents()).prop('checked', o.disabled); + $('#fenabled', $('iframe').contents()).prop('checked', !o.disabled); break; @@ -426,13 +423,11 @@ if (reset) this.reset_filters_list(); - if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { - var lock = this.set_busy(true, 'loading'), - target = window.frames[this.env.contentframe]; + var target = this.get_frame_window(this.env.contentframe), + url = this.url('plugin.managesieve-action', '_framed=1' + (add_url ? ('&' + add_url) : '')); - target.location.href = this.env.comm_path - + '&_action=plugin.managesieve-action&_framed=1&_unlock=' + lock - + (add_url ? ('&' + add_url) : ''); + if (target) { + this.location_href(url, target, true); } }; @@ -684,7 +679,7 @@ rule.val('contains'); rule_op_select(op, id, h); - rule_mod_select(id, h); + rule_mod_select(id, h, !is_header); rule_mime_select(id); obj.style.width = h == '...' ? '40px' : ''; @@ -708,13 +703,16 @@ target.style.display = obj.value != 'content' ? 'none' : 'inline'; }; -function rule_mod_select(id, header) +function rule_mod_select(id, header, reset) { var obj = document.getElementById('rule_mod_op' + id), target = document.getElementById('rule_mod_type' + id), duplicate = document.getElementById('rule_duplicate_div' + id), index = document.getElementById('rule_index_div' + id); + if (reset) + obj.value = ''; + if (!header) header = document.getElementById('header' + id).value;
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/classic/managesieve.css -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/classic/managesieve.css
Changed
@@ -1,5 +1,4 @@ -#filtersetslistbox -{ +#filtersetslistbox { position: absolute; top: 0; bottom: 0; @@ -10,8 +9,7 @@ overflow: hidden; } -#filtersscreen -{ +#filtersscreen { position: absolute; top: 0; right: 0; @@ -19,13 +17,11 @@ left: 205px; } -#filtersscreen.nosetlist -{ +#filtersscreen.nosetlist { left: 0; } -#filterslistbox -{ +#filterslistbox { position: absolute; left: 0; top: 0; @@ -35,34 +31,29 @@ } #filterslist, -#filtersetslist -{ +#filtersetslist { width: 100%; table-layout: fixed; } #filterslist tbody td, -#filtersetslist tbody td -{ +#filtersetslist tbody td { cursor: default; text-overflow: ellipsis; -o-text-overflow: ellipsis; } #filterslist tbody tr.disabled td, -#filtersetslist tbody tr.disabled td -{ +#filtersetslist tbody tr.disabled td { color: #999999; - text-decoration: line-through; + text-decoration: line-through; } -#filtersetslist tbody td -{ +#filtersetslist tbody td { font-weight: bold; } /* -#filtersetslist tr.selected -{ +#filtersetslist tr.selected { background-color: #929292; border-bottom: 1px solid #898989; color: #FFF; @@ -70,20 +61,17 @@ } */ -#filterslist tbody tr.filtermoveup td -{ +#filterslist tbody tr.filtermoveup td { border-top: 2px dotted #555; padding-top: 0px; } -#filterslist tbody tr.filtermovedown td -{ +#filterslist tbody tr.filtermovedown td { border-bottom: 2px dotted #555; padding-bottom: 1px; } -#filter-box -{ +#filter-box { position: absolute; top: 0; right: 0; @@ -92,37 +80,39 @@ overflow: hidden; } -#filter-frame -{ +#filter-frame { border: none; } -body.iframe -{ +body.iframe { min-width: 620px; width: expression(Math.max(620, document.documentElement.clientWidth)+'px'); background-color: #F2F2F2; } -#filter-form -{ +#filter-form { min-width: 550px; width: expression(Math.max(550, document.documentElement.clientWidth)+'px'); white-space: nowrap; padding: 20px 10px 10px 10px; } -#filter-form legend, #filter-form label -{ +#filter-form legend, +#filter-form label { color: #666666; } -filter-form .col-form-label { +#filter-form .col-sm-4, +#filter-form .col-form-label { display: inline-block; - min-width: 75px; + min-width: 100px; line-height: 2.5; } +#filter-form input[type=checkbox] { + margin: 0; +} + #filter-form .col-form-label + div { display: inline; } @@ -131,48 +121,45 @@ margin: 0; } -#rules, #actions -{ +#rules, +#actions { margin-top: 5px; padding: 0; border-collapse: collapse; } -div.rulerow, div.actionrow -{ +div.rulerow, +div.actionrow { width: auto; padding: 2px; white-space: nowrap; border: 1px solid #F2F2F2; } -div.rulerow:hover, div.actionrow:hover -{ +div.rulerow:hover, +div.actionrow:hover { padding: 2px; white-space: nowrap; background: #F9F9F9; border: 1px solid silver; } -div.rulerow table, div.actionrow table -{ +div.rulerow table, +div.actionrow table { padding: 0px; min-width: 600px; width: expression(Math.max(600, document.documentElement.clientWidth)+'px'); } -td -{ +td { vertical-align: top; } -td.advbutton -{ +td.advbutton { width: 1%; } -td.advbutton a -{ +td.advbutton a { display: block; padding-top: 14px; height: 14px; @@ -184,136 +171,116 @@ display: none; } -td.advbutton a.show -{ +td.advbutton a.show { background: url(images/down_small.gif) center no-repeat; } -td.advbutton a.hide -{ +td.advbutton a.hide { background: url(images/up_small.gif) center no-repeat; } -td.rowbuttons -{ +td.rowbuttons { text-align: right; white-space: nowrap; width: 1%; } -td.rowactions -{ +td.rowactions { white-space: nowrap; width: 1%; padding-top: 2px; } -td.rowtargets -{ +td.rowtargets { white-space: nowrap; width: 98%; padding-left: 3px; padding-top: 2px; } -td.rowtargets > div -{ +td.rowtargets > div { vertical-align: top; margin-top: 2px; } -td.rowtargets div.adv -{ +td.rowtargets div.adv { padding-top: 3px; } -td.rowtargets div.adv span.label -{ +td.rowtargets div.adv span.label { display: inline-block; padding-right: 10px; min-width: 65px; } -td.rowtargets div a -{ +td.rowtargets div a { margin-left: 10px; } -td.rowtargets div.adv input -{ +td.rowtargets div.adv input { margin-bottom: 1px; } -input.disabled, input.disabled:hover -{ +input.disabled, +input.disabled:hover { color: #999999; } -input.error, textarea.error -{ +input.error, +textarea.error { background-color: #FFFF88; } input.box, -input.radio -{ +input.radio { border: 0; margin-top: 0; } -select.operator_selector -{ +select.operator_selector { width: 200px; vertical-align: top; } td.rowtargets span, td.rowtargets label, -span.label -{ +span.label { color: #666666; font-size: 10px; white-space: nowrap; } -td.rowtargets label -{ +td.rowtargets label { color: black; } -#footer -{ +#footer { padding-top: 5px; width: 100%; } -#footer .footerleft -{ +#footer .footerleft { padding-left: 2px; white-space: nowrap; float: left; } -#footer .footerright -{ +#footer .footerright { padding-right: 2px; white-space: nowrap; text-align: right; float: right; } -.itemlist -{ +.itemlist { line-height: 25px; } -.itemlist input -{ +.itemlist input { vertical-align: middle; } -span.sieve.error -{ +span.sieve.error { color: red; } @@ -321,8 +288,7 @@ display: none; } -a.button.add -{ +a.button.add { background: url(images/add.png) no-repeat; width: 30px; height: 20px; @@ -330,16 +296,14 @@ display: inline-block; } -a.button.del -{ +a.button.del { background: url(images/del.png) no-repeat; width: 30px; height: 20px; display: inline-block; } -a.button.disabled -{ +a.button.disabled { opacity: 0.35; filter: alpha(opacity=35); cursor: default; @@ -347,15 +311,13 @@ #filter-form select, #filter-form input, -#filter-form textarea -{ +#filter-form textarea { font-size: 11px; vertical-align: middle; } /* smart multi-row input field */ -.listarea -{ +.listarea { border: 1px solid #666; margin: 0; padding: 1px; @@ -365,14 +327,12 @@ vertical-align: middle; } -td.rowtargets > span.listarea -{ +td.rowtargets > span.listarea { vertical-align: top; margin-top: 2px; } -.listelement -{ +.listelement { display: block; white-space: nowrap; background-color: #fff; @@ -384,18 +344,15 @@ line-height: 16px; } -.listarea.error .listelement -{ +.listarea.error .listelement { background-color: #FFFF88; } -.listelement:first-child -{ +.listelement:first-child { border-top: none; } -#filter-form .listelement input -{ +#filter-form .listelement input { border: none; border-radius: 0; box-shadow: none; @@ -408,13 +365,11 @@ background-color: transparent; } -.listelement input:focus -{ +.listelement input:focus { box-shadow: none; } -.listelement .reset -{ +.listelement .reset { display: inline-block; width: 16px; height: 16px; @@ -425,14 +380,12 @@ /* fixes for popup window */ -body.iframe.mail -{ +body.iframe.mail { margin: 0; padding: 0; } -body.iframe.mail #filter-form -{ +body.iframe.mail #filter-form { padding: 10px 5px 5px 5px; }
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/classic/managesieve_mail.css -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/classic/managesieve_mail.css
Changed
@@ -51,12 +51,10 @@ font-weight: bold; } -#managesieve-tip -{ +#managesieve-tip { z-index: 100000; } -span.sieve.error -{ +span.sieve.error { color: red; }
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/classic/templates/filteredit.html -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/classic/templates/filteredit.html
Changed
@@ -17,10 +17,6 @@ <div class="footerleft"> <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" /> </div> -<div class="footerright"> -<label for="disabled"><roundcube:label name="managesieve.filterdisabled" /></label> -<input type="checkbox" id="disabled" name="_disabled" value="1" /> -</div> </div> <roundcube:endif />
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/larry/managesieve.css -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/larry/managesieve.css
Changed
@@ -95,8 +95,8 @@ padding: 20px 10px 10px 10px; } -#filter-form legend, #filter-form label -{ +#filter-form legend, +#filter-form label { color: #666666; vertical-align: middle; } @@ -105,12 +105,17 @@ border: none; } +#filter-form .col-sm-4, #filter-form .col-form-label { display: inline-block; - min-width: 75px; + min-width: 100px; line-height: 2.5; } +#filter-form input[type=checkbox] { + margin: 0; +} + #filter-form .col-form-label + div { display: inline; } @@ -352,6 +357,7 @@ vertical-align: middle; max-width: 280px; } + /* revert larry style button */ #filter-form input.button {
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/larry/templates/filteredit.html -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/larry/templates/filteredit.html
Changed
@@ -16,10 +16,6 @@ <div id="footer"> <div class="footerleft formbuttons"> <roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" /> -<label for="disabled"> -<input type="checkbox" id="disabled" name="_disabled" value="1" /> -<roundcube:label name="managesieve.filterdisabled" /> -</label> </div> </div> <roundcube:endif />
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/skins/larry/templates/managesieve.html -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/skins/larry/templates/managesieve.html
Changed
@@ -73,7 +73,7 @@ <roundcube:include file="/includes/footer.html" /> -<script type="text/javascript"> +<script> <roundcube:if condition="!env:managesieve_no_set_list" /> new rcube_splitter({ id:'managesievesplitter1', p1:'#filtersetslistbox', p2:'#filtersscreen', orientation:'v', relative:true, start:156, min:120, size:12 }).init();
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/tests/Managesieve.php -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/tests/Managesieve.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new managesieve($rcube->api); + $plugin = new managesieve($rcube->plugins); $this->assertInstanceOf('managesieve', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/managesieve/tests/Vacation.php -> roundcubemail-1.4.1.27.tar.gz/plugins/managesieve/tests/Vacation.php
Changed
@@ -10,6 +10,25 @@ } /** + * Call protected/private method of rcube_sieve_vacation object. + * + * @param string $methodName Method name to call + * @param array $parameters Array of parameters to pass into method. + * + * @return mixed Method return. + */ + public function invokePrivateMethod($methodName, array $parameters = array()) + { + $vacation = new rcube_sieve_vacation(true); + $reflection = new ReflectionClass('rcube_sieve_vacation'); + + $method = $reflection->getMethod($methodName); + $method->setAccessible(true); + + return $method->invokeArgs($vacation, $parameters); + } + + /** * Plugin object construction test */ function test_constructor() @@ -21,7 +40,7 @@ function test_build_regexp_tests() { - $tests = rcube_sieve_vacation::build_regexp_tests('2014-02-20', '2014-03-05', $error); + $tests = $this->invokePrivateMethod('build_regexp_tests', array('2014-02-20', '2014-03-05', &$error)); $this->assertCount(2, $tests); $this->assertSame('header', $tests[0]['test']); @@ -33,7 +52,7 @@ $this->assertSame('received', $tests[1]['arg1']); $this->assertSame('([ 0]1|[ 0]2|[ 0]3|[ 0]4|[ 0]5) Mar 2014', $tests[1]['arg2']); - $tests = rcube_sieve_vacation::build_regexp_tests('2014-02-20', '2014-01-05', $error); + $tests = $this->invokePrivateMethod('build_regexp_tests', array('2014-02-20', '2014-01-05', &$error)); $this->assertSame(null, $tests); $this->assertSame('managesieve.invaliddateformat', $error); @@ -56,7 +75,7 @@ ) ); - $result = rcube_sieve_vacation::parse_regexp_tests($tests); + $result = $this->invokePrivateMethod('parse_regexp_tests', array($tests)); $this->assertCount(2, $result); $this->assertSame('20 Feb 2014', $result['from']);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/markasjunk/tests/Markasjunk.php -> roundcubemail-1.4.1.27.tar.gz/plugins/markasjunk/tests/Markasjunk.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new markasjunk($rcube->api); + $plugin = new markasjunk($rcube->plugins); $this->assertInstanceOf('markasjunk', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/new_user_dialog/tests/NewUserDialog.php -> roundcubemail-1.4.1.27.tar.gz/plugins/new_user_dialog/tests/NewUserDialog.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new new_user_dialog($rcube->api); + $plugin = new new_user_dialog($rcube->plugins); $this->assertInstanceOf('new_user_dialog', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/new_user_identity/tests/NewUserIdentity.php -> roundcubemail-1.4.1.27.tar.gz/plugins/new_user_identity/tests/NewUserIdentity.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new new_user_identity($rcube->api); + $plugin = new new_user_identity($rcube->plugins); $this->assertInstanceOf('new_user_identity', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/newmail_notifier/tests/NewmailNotifier.php -> roundcubemail-1.4.1.27.tar.gz/plugins/newmail_notifier/tests/NewmailNotifier.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new newmail_notifier($rcube->api); + $plugin = new newmail_notifier($rcube->plugins); $this->assertInstanceOf('newmail_notifier', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/password/config.inc.php.dist -> roundcubemail-1.4.1.27.tar.gz/plugins/password/config.inc.php.dist
Changed
@@ -6,8 +6,7 @@ // See README file for list of supported driver names. $config['password_driver'] = 'sql'; -// A driver to use for checking password strength. Default: null. -// Set password_check_strength to true to enable +// A driver to use for checking password strength. Default: null (disabled). // See README file for list of supported driver names. $config['password_strength_driver'] = null;
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/password/drivers/kpasswd.php -> roundcubemail-1.4.1.27.tar.gz/plugins/password/drivers/kpasswd.php
Changed
@@ -19,8 +19,8 @@ { public function save($currpass, $newpass, $username) { - $bin = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd'); - $cmd = $bin . ' "' . escapeshellarg($username) . '" 2>&1'; + $bin = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd'); + $cmd = $bin . ' ' . escapeshellarg($username) . ' 2>&1'; $handle = popen($cmd, "w"); fwrite($handle, $currpass."\n");
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/password/drivers/pw_usermod.php -> roundcubemail-1.4.1.27.tar.gz/plugins/password/drivers/pw_usermod.php
Changed
@@ -32,7 +32,7 @@ { public function save($currpass, $newpass, $username) { - $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd'); + $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd', 'sudo /usr/sbin/pw usermod -h 0 -n'); $cmd .= ' ' . escapeshellarg($username) . ' > /dev/null'; $handle = popen($cmd, 'w');
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/password/drivers/smb.php -> roundcubemail-1.4.1.27.tar.gz/plugins/password/drivers/smb.php
Changed
@@ -41,11 +41,11 @@ public function save($currpass, $newpass, $username) { - $host = rcmail::get_instance()->config->get('password_smb_host','localhost'); - $bin = rcmail::get_instance()->config->get('password_smb_cmd','/usr/bin/smbpasswd'); + $host = rcmail::get_instance()->config->get('password_smb_host', 'localhost'); + $bin = rcmail::get_instance()->config->get('password_smb_cmd', '/usr/bin/smbpasswd'); $host = rcube_utils::parse_host($host); - $tmpfile = tempnam(sys_get_temp_dir(),'smb'); - $cmd = $bin . ' -r ' . escapeshellarg($host) . ' -s -U "' . escapeshellarg($username) . '" > ' . $tmpfile . ' 2>&1'; + $tmpfile = tempnam(sys_get_temp_dir(), 'smb'); + $cmd = $bin . ' -r ' . escapeshellarg($host) . ' -s -U ' . escapeshellarg($username) . ' > ' . $tmpfile . ' 2>&1'; $handle = @popen($cmd, 'w'); fwrite($handle, $currpass."\n");
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/password/tests/Password.php -> roundcubemail-1.4.1.27.tar.gz/plugins/password/tests/Password.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new password($rcube->api); + $plugin = new password($rcube->plugins); $this->assertInstanceOf('password', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/redundant_attachments/tests/RedundantAttachments.php -> roundcubemail-1.4.1.27.tar.gz/plugins/redundant_attachments/tests/RedundantAttachments.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new redundant_attachments($rcube->api); + $plugin = new redundant_attachments($rcube->plugins); $this->assertInstanceOf('redundant_attachments', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/show_additional_headers/tests/ShowAdditionalHeaders.php -> roundcubemail-1.4.1.27.tar.gz/plugins/show_additional_headers/tests/ShowAdditionalHeaders.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new show_additional_headers($rcube->api); + $plugin = new show_additional_headers($rcube->plugins); $this->assertInstanceOf('show_additional_headers', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/squirrelmail_usercopy/tests/SquirrelmailUsercopy.php -> roundcubemail-1.4.1.27.tar.gz/plugins/squirrelmail_usercopy/tests/SquirrelmailUsercopy.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new squirrelmail_usercopy($rcube->api); + $plugin = new squirrelmail_usercopy($rcube->plugins); $this->assertInstanceOf('squirrelmail_usercopy', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/subscriptions_option/tests/SubscriptionsOption.php -> roundcubemail-1.4.1.27.tar.gz/plugins/subscriptions_option/tests/SubscriptionsOption.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new subscriptions_option($rcube->api); + $plugin = new subscriptions_option($rcube->plugins); $this->assertInstanceOf('subscriptions_option', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/userinfo/tests/Userinfo.php -> roundcubemail-1.4.1.27.tar.gz/plugins/userinfo/tests/Userinfo.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new userinfo($rcube->api); + $plugin = new userinfo($rcube->plugins); $this->assertInstanceOf('userinfo', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/vcard_attachments/tests/VcardAttachments.php -> roundcubemail-1.4.1.27.tar.gz/plugins/vcard_attachments/tests/VcardAttachments.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new vcard_attachments($rcube->api); + $plugin = new vcard_attachments($rcube->plugins); $this->assertInstanceOf('vcard_attachments', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/virtuser_file/tests/VirtuserFile.php -> roundcubemail-1.4.1.27.tar.gz/plugins/virtuser_file/tests/VirtuserFile.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new virtuser_file($rcube->api); + $plugin = new virtuser_file($rcube->plugins); $this->assertInstanceOf('virtuser_file', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/virtuser_query/tests/VirtuserQuery.php -> roundcubemail-1.4.1.27.tar.gz/plugins/virtuser_query/tests/VirtuserQuery.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new virtuser_query($rcube->api); + $plugin = new virtuser_query($rcube->plugins); $this->assertInstanceOf('virtuser_query', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/plugins/zipdownload/tests/Zipdownload.php -> roundcubemail-1.4.1.27.tar.gz/plugins/zipdownload/tests/Zipdownload.php
Changed
@@ -14,7 +14,7 @@ function test_constructor() { $rcube = rcube::get_instance(); - $plugin = new zipdownload($rcube->api); + $plugin = new zipdownload($rcube->plugins); $this->assertInstanceOf('zipdownload', $plugin); $this->assertInstanceOf('rcube_plugin', $plugin);
View file
roundcubemail-1.4-rc2.12.tar.gz/program/include/iniset.php -> roundcubemail-1.4.1.27.tar.gz/program/include/iniset.php
Changed
@@ -20,7 +20,7 @@ */ // application constants -define('RCMAIL_VERSION', '1.4-git'); +define('RCMAIL_VERSION', '1.4.1'); define('RCMAIL_START', microtime(true)); if (!defined('INSTALL_PATH')) {
View file
roundcubemail-1.4-rc2.12.tar.gz/program/include/rcmail_install.php -> roundcubemail-1.4.1.27.tar.gz/program/include/rcmail_install.php
Changed
@@ -61,6 +61,11 @@ 'Oracle' => 'oci8', ); + /** @var array List of config options with default value change per-release */ + public $defaults_changes = array( + '1.4.0' => array('skin', 'smtp_port', 'smtp_user', 'smtp_pass'), + '1.4.1' => array('jquery_ui_skin_map'), + ); /** * Constructor @@ -298,9 +303,11 @@ * Check the current configuration for missing properties * and deprecated or obsolete settings * + * @param string $version Previous version on upgrade + * * @return array List with problems detected */ - public function check_config() + public function check_config($version = null) { $this->load_config(); @@ -379,6 +386,18 @@ } } + if ($version) { + $out['defaults'] = array(); + + foreach ($this->defaults_changes as $v => $opts) { + if (version_compare($v, $version, '>')) { + $out['defaults'] = array_merge($out['defaults'], $opts); + } + } + + $out['defaults'] = array_unique($out['defaults']); + } + return $out; } @@ -444,9 +463,23 @@ // read reference schema from mysql.initial.sql $engine = $db->db_provider; - $db_schema = $this->db_read_schema(INSTALL_PATH . "SQL/$engine.initial.sql"); + $db_schema = $this->db_read_schema(INSTALL_PATH . "SQL/$engine.initial.sql", $schema_version); $errors = array(); + // Just check the version + if ($schema_version) { + $version = rcmail_utils::db_version(); + + if (empty($version)) { + $errors[] = "Schema version not found"; + } + else if ($schema_version != $version) { + $errors[] = "Schema version: {$version} (required: {$schema_version})"; + } + + return !empty($errors) ? $errors : false; + } + // check list of tables $existing_tables = $db->list_tables(); @@ -472,7 +505,7 @@ /** * Utility function to read database schema from an .sql file */ - private function db_read_schema($schemafile) + private function db_read_schema($schemafile, &$version = null) { $lines = file($schemafile); $schema = array(); @@ -484,6 +517,9 @@ $table_name = end($table_name); $table_name = preg_replace('/[`"\[\]]/', '', $table_name); } + else if (preg_match('/insert into/i', $line) && preg_match('/\'roundcube-version\',\s*\'([0-9]+)\'/', $line, $m)) { + $version = $m[1]; + } else if ($table_name && ($line = trim($line))) { if ($line == 'GO' || $line[0] == ')' || $line[strlen($line)-1] == ';') { $table_name = null;
View file
roundcubemail-1.4-rc2.12.tar.gz/program/include/rcmail_output_html.php -> roundcubemail-1.4.1.27.tar.gz/program/include/rcmail_output_html.php
Changed
@@ -1353,7 +1353,7 @@ else if ($object == 'logo') { $attrib += array('alt' => $this->xml_command(array('', 'object', 'name="productname"'))); - if (!empty($attrib['type']) && ($template_logo = $this->get_template_logo(':' . $attrib['type'], true)) !== null) { + if (!empty($attrib['type']) && ($template_logo = $this->get_template_logo($attrib['type'])) !== null) { $attrib['src'] = $template_logo; } else if (($template_logo = $this->get_template_logo()) !== null) { @@ -1363,7 +1363,7 @@ // process alternative logos (eg for Elastic small screen) foreach ($attrib as $key => $value) { if (preg_match('/data-src-(.*)/', $key, $matches)) { - if (($template_logo = $this->get_template_logo(':' . $matches[1], true)) !== null) { + if (($template_logo = $this->get_template_logo($matches[1])) !== null) { $attrib[$key] = $template_logo; } @@ -1447,7 +1447,7 @@ // special handling for favicon if ($object == 'links' && $name == 'shortcut icon' && empty($args[$param])) { - if ($href = $this->get_template_logo(':favicon', true)) { + if ($href = $this->get_template_logo('favicon')) { $args[$param] = $href; } else if ($href = $this->config->get('favicon', '/images/favicon.ico')) { @@ -1790,7 +1790,7 @@ public function add_script($script, $position = 'head') { if (!isset($this->scripts[$position])) { - $this->scripts[$position] = "\n" . rtrim($script); + $this->scripts[$position] = rtrim($script); } else { $this->scripts[$position] .= "\n" . rtrim($script); @@ -1852,7 +1852,7 @@ // put docready commands into page footer if (!empty($this->scripts['docready'])) { - $this->add_script('$(function(){ ' . $this->scripts['docready'] . "\n});", 'foot'); + $this->add_script("\$(function() {\n" . $this->scripts['docready'] . "\n});", 'foot'); } $page_header = ''; @@ -2447,35 +2447,43 @@ /** * Get logo URL for current template based on skin_logo config option * - * @param string $name Name of the logo to check for - * default is current template - * @param boolean $strict True if logo should only be returned for specific template + * @param string $type Type of the logo to check for (e.g. 'print' or 'small') + * default is null (no special type) * * @return string image URL */ - protected function get_template_logo($name = null, $strict = false) + protected function get_template_logo($type = null) { $template_logo = null; - // Use current template if none provided - if (!$name) { - $name = $this->template_name; - } - - $template_names = array( - $this->skin_name . ':' . $name, - $this->skin_name . ':*', - $name, - '*', - ); - - // If strict matching then remove wildcard options - if ($strict) { - $template_names = preg_grep("/\*$/", $template_names, PREG_GREP_INVERT); - } - if ($logo = $this->config->get('skin_logo')) { if (is_array($logo)) { + $template_names = array( + $this->skin_name . ':' . $this->template_name . '[' . $type . ']', + $this->skin_name . ':' . $this->template_name, + $this->skin_name . ':*[' . $type . ']', + $this->skin_name . ':[' . $type . ']', + $this->skin_name . ':*', + '*:' . $this->template_name . '[' . $type . ']', + '*:' . $this->template_name, + '*:*[' . $type . ']', + '*:[' . $type . ']', + $this->template_name . '[' . $type . ']', + $this->template_name, + '*[' . $type . ']', + '[' . $type . ']', + '*', + ); + + if (!empty($type)) { + // Use strict matching, remove wild card options + $template_names = preg_grep("/\*$/", $template_names, PREG_GREP_INVERT); + } + else { + // No type set so remove those options from the list + $template_names = preg_grep("/\\[\]$/", $template_names, PREG_GREP_INVERT); + } + foreach ($template_names as $key) { if (isset($logo[$key])) { $template_logo = $logo[$key];
View file
roundcubemail-1.4-rc2.12.tar.gz/program/include/rcmail_utils.php -> roundcubemail-1.4.1.27.tar.gz/program/include/rcmail_utils.php
Changed
@@ -112,13 +112,7 @@ // Read DB schema version from database (if 'system' table exists) if (in_array($db->table_name('system'), (array)$db->list_tables())) { - $db->query("SELECT `value`" - . " FROM " . $db->table_name('system', true) - . " WHERE `name` = ?", - $package . '-version'); - - $row = $db->fetch_array(); - $version = preg_replace('/[^0-9]/', '', $row[0]); + $version = self::db_version($package); } // DB version not found, but release version is specified @@ -254,6 +248,28 @@ } /** + * Get version string for the specified package + * + * @param string $package Package name + * + * @return string Version string + */ + public static function db_version($package = 'roundcube') + { + $db = self::db(); + + $db->query("SELECT `value`" + . " FROM " . $db->table_name('system', true) + . " WHERE `name` = ?", + $package . '-version'); + + $row = $db->fetch_array(); + $version = preg_replace('/[^0-9]/', '', $row[0]); + + return $version; + } + + /** * Removes all deleted records older than X days * * @param int $days Number of days
View file
roundcubemail-1.4-rc2.12.tar.gz/program/js/app.js -> roundcubemail-1.4.1.27.tar.gz/program/js/app.js
Changed
@@ -268,7 +268,7 @@ this.message_list .addEventListener('initrow', function(o) { ref.init_message_row(o); }) .addEventListener('dblclick', function(o) { ref.msglist_dbl_click(o); }) - .addEventListener('keypress', function(o) { ref.list_keypress(o); }) + .addEventListener('keypress', function(o) { ref.msglist_keypress(o); }) .addEventListener('select', function(o) { ref.msglist_select(o); }) .addEventListener('dragstart', function(o) { ref.drag_start(o); }) .addEventListener('dragmove', function(e) { ref.drag_move(e); }) @@ -624,8 +624,6 @@ input_user = $('#rcmloginuser'), input_tz = $('#rcmlogintz'); - input_user.keyup(function(e) { return ref.login_user_keyup(e); }); - if (input_user.val() == '') input_user.focus(); else @@ -951,8 +949,9 @@ if (this.task == 'mail') { uid = this.get_single_uid(); if (uid && (!this.env.uid || uid != this.env.uid)) { - if (this.env.mailbox == this.env.drafts_mailbox) - this.open_compose_step({ _draft_uid: uid, _mbox: this.env.mailbox }); + var mbox = this.get_message_mailbox(uid); + if (mbox == this.env.drafts_mailbox) + this.open_compose_step({_draft_uid: uid, _mbox: mbox}); else this.show_message(uid); } @@ -981,7 +980,7 @@ this.load_contact(cid, 'edit'); else if (this.task == 'mail' && (uid = this.get_single_uid())) { url = { _mbox: this.get_message_mailbox(uid) }; - url[this.env.mailbox == this.env.drafts_mailbox && props != 'new' ? '_draft_uid' : '_uid'] = uid; + url[url._mbox == this.env.drafts_mailbox && props != 'new' ? '_draft_uid' : '_uid'] = uid; this.open_compose_step(url); } break; @@ -1920,17 +1919,29 @@ this.command(conf && conf.next ? conf.next : 'nextpage'); }; + // Handler for a keypress event on a messages list widget + this.msglist_keypress = function(list) + { + // On Enter open the message in list layout mode (no preview frame) + if (list.key_pressed == list.ENTER_KEY && !this.env.contentframe) + this.command('show'); + else + this.list_keypress(list); + }; + this.msglist_select = function(list) { if (this.preview_timer) clearTimeout(this.preview_timer); - var selected = list.get_single_selection(); + var selected = list.get_single_selection(), + selected_count = list.get_selection(false).length; this.enable_command(this.env.message_commands, selected != null); + if (selected) { // Hide certain command buttons when Drafts folder is selected - if (this.env.mailbox == this.env.drafts_mailbox) + if (this.get_message_mailbox(selected) == this.env.drafts_mailbox) this.enable_command('reply', 'reply-all', 'reply-list', 'forward', 'forward-attachment', 'forward-inline', false); // Disable reply-list when List-Post header is not set else { @@ -1939,19 +1950,20 @@ this.enable_command('reply-list', false); } } + // Multi-message commands - this.enable_command('delete', 'move', 'copy', 'mark', 'forward', 'forward-attachment', list.get_selection(false).length > 0); + this.enable_command('delete', 'move', 'copy', 'mark', 'forward', 'forward-attachment', selected_count > 0); // reset all-pages-selection - if (selected || (list.get_selection(false).length && list.get_selection(false).length != list.rowcount)) + if (selected || (selected_count && selected_count != list.rowcount)) this.select_all_mode = false; // start timer for message preview (wait for double click) if (selected && this.env.contentframe && !list.multi_selecting && !this.dummy_select) { // try to be responsive and try not to overload the server when user is pressing up/down key repeatedly - var now = new Date().getTime(); - var time_diff = now - (this._last_msglist_select_time || 0); - var preview_pane_delay = this.preview_delay_click; + var now = new Date().getTime(), + time_diff = now - (this._last_msglist_select_time || 0), + preview_pane_delay = this.preview_delay_click; // user is selecting messages repeatedly, wait until this ends (use larger delay) if (time_diff < this.preview_delay_select) { @@ -1977,12 +1989,18 @@ if (this.preview_timer) clearTimeout(this.preview_timer); - var uid = list.get_single_selection(); + var mbox, uid = list.get_single_selection(); + + // TODO: Here we should just use this.command('show') but we can't + // because at this point this.busy=true (set by msglist_get_preview()) - if (uid && (this.env.messages[uid].mbox || this.env.mailbox) == this.env.drafts_mailbox) - this.open_compose_step({ _draft_uid: uid, _mbox: this.env.mailbox }); - else if (uid) - this.show_message(uid, false, false); + if (uid) { + mbox = this.get_message_mailbox(uid); + if (mbox == this.env.drafts_mailbox) + this.open_compose_step({_draft_uid: uid, _mbox: mbox}); + else + this.show_message(uid); + } }; this.msglist_get_preview = function() @@ -3077,7 +3095,7 @@ css_class += ' status'; } - $(row.icon).attr('class', css_class).attr('title', label); + $(row.icon).attr({'class': css_class, title: label}); } if (row.msgicon && row.msgicon != row.icon) { @@ -3095,15 +3113,14 @@ label += this.get_label('forwarded') + ' '; } - $(row.msgicon).attr('class', css_class).attr('title', label); + $(row.msgicon).attr({'class': css_class, title: label}); } if (row.flagicon) { css_class = (row.flagged ? 'flagged' : 'unflagged'); label = this.get_label(css_class); $(row.flagicon).attr('class', css_class) - .attr('aria-label', label) - .attr('title', label); + .attr({'aria-label': label, title: label}); } }; @@ -3811,8 +3828,11 @@ $('#' + ref.env.composebody).show(); $("[name='_pgpmime']").remove(); - // disable commands that operate on the compose body - ref.enable_command('spellcheck', 'insert-sig', 'toggle-editor', 'insert-response', 'save-response', true); + // re-enable commands that operate on the compose body + ref.enable_command('toggle-editor', 'insert-response', 'save-response', true); + ref.enable_command('spellcheck', !!window.googie); + ref.enable_command('insert-sig', !!(ref.env.signatures && ref.env.identity && ref.env.signatures[ref.env.identity])); + ref.triggerEvent('compose-encrypted', { active:false }); } // embed Mailvelope editor container @@ -4075,9 +4095,7 @@ li.append($('<label>').addClass('keyid').text(ref.get_label('keyid'))); li.append($('<a>').text(keyrec.keyid.substr(-8).toUpperCase()) - .attr('href', keyrec.info) - .attr('target', '_blank') - .attr('tabindex', '-1')); + .attr({href: keyrec.info, target: '_blank', tabindex: '-1'})); li.append($('<label>').addClass('keylen').text(ref.get_label('keylength'))); li.append($('<span>').text(keyrec.keylen)); @@ -4467,26 +4485,6 @@ /*********************************************************/ - /********* login form methods *********/ - /*********************************************************/ - - // handler for keyboard events on the _user field - this.login_user_keyup = function(e) - { - var key = rcube_event.get_keycode(e), - passwd = $('#rcmloginpwd'); - - // enter - if (key == 13 && passwd.length && !passwd.val()) { - passwd.focus(); - return rcube_event.cancel(e); - } - - return true; - }; - - - /*********************************************************/ /********* message compose methods *********/ /*********************************************************/ @@ -4578,22 +4576,14 @@ // init autocomplete events on compose form inputs this.init_messageform_inputs = function(focused) { - var i, ac_props, + var i, input_to = $("[name='_to']"), ac_fields = ['cc', 'bcc', 'replyto', 'followupto']; - // configure parallel autocompletion - if (this.env.autocomplete_threads > 0) { - ac_props = { - threads: this.env.autocomplete_threads, - sources: this.env.autocomplete_sources - }; - } - // init live search events - this.init_address_input_events(input_to, ac_props); + this.init_address_input_events(input_to); for (i in ac_fields) { - this.init_address_input_events($("[name='_"+ac_fields[i]+"']"), ac_props); + this.init_address_input_events($("[name='_"+ac_fields[i]+"']")); } if (!focused) @@ -4674,6 +4664,14 @@ this.init_address_input_events = function(obj, props) { + // configure parallel autocompletion + if (!props && this.env.autocomplete_threads > 0) { + props = { + threads: this.env.autocomplete_threads, + sources: this.env.autocomplete_sources + }; + } + obj.keydown(function(e) { return ref.ksearch_keydown(e, this, props); }) .attr({autocomplete: 'off', 'aria-autocomplete': 'list', 'aria-expanded': 'false', role: 'combobox'}); @@ -4935,21 +4933,21 @@ this.toggle_editor = function(props, obj, e) { // @todo: this should work also with many editors on page - var result = this.editor.toggle(props.html, props.noconvert || false); + var mode, result = this.editor.toggle(props.html, props.noconvert || false), + control = $('#' + this.editor.id).data('control') || $(e ? e.target : []); - // satisfy the expectations of aftertoggle-editor event subscribers - props.mode = props.html ? 'html' : 'plain'; + if (result) + mode = props.html ? 'html' : 'plain'; + else + mode = props.html ? 'plain' : 'html'; - if (!result && e) { - // fix selector value if operation failed - props.mode = props.html ? 'plain' : 'html'; - $(e.target).filter('select').val(props.mode); - } + // update internal format flag + $("[name='_is_html']").val(mode == 'html' ? 1 : 0); - if (result) { - // update internal format flag - $("[name='_is_html']").val(props.html ? 1 : 0); - } + if (control.is('[type=checkbox]')) + control.prop('checked', mode == 'html'); + else + control.val(mode); return result; }; @@ -5010,9 +5008,7 @@ if (this.gui_objects.responseslist) { var li = $('<li>').appendTo(this.gui_objects.responseslist); $('<a>').addClass('insertresponse active') - .attr('href', '#') - .attr('rel', key) - .attr('tabindex', '0') + .attr({href: '#', rel: key, tabindex: '0'}) .html(this.quote_html(response.name)) .appendTo(li) .mousedown(function(e) { @@ -6007,8 +6003,7 @@ text = typeof results[i] === 'object' ? (results[i].display || results[i].name) : results[i]; type = typeof results[i] === 'object' ? results[i].type : ''; id = i + this.env.contacts.length; - $('<li>').attr('id', 'rcmkSearchItem' + id) - .attr('role', 'option') + $('<li>').attr({id: 'rcmkSearchItem' + id, role: 'option'}) .html('<i class="icon"></i>' + this.quote_html(text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%')).replace(/##([^%]+)%%/g, '<b>$1</b>')) .addClass(type || '') .appendTo(ul) @@ -6022,9 +6017,7 @@ if (ul.childNodes.length) { // set the right aria-* attributes to the input field $(this.ksearch_input) - .attr('aria-haspopup', 'true') - .attr('aria-expanded', 'true') - .attr('aria-owns', 'rcmKSearchpane'); + .attr({'aria-haspopup': 'true', 'aria-expanded': 'true', 'aria-owns': 'rcmKSearchpane'}); this.ksearch_pane.show(); @@ -6104,8 +6097,7 @@ this.ksearch_pane.hide(); $(this.ksearch_input) - .attr('aria-haspopup', 'false') - .attr('aria-expanded', 'false') + .attr({'aria-haspopup': 'false', 'aria-expanded': 'false'}) .removeAttr('aria-activedescendant') .removeAttr('aria-owns'); @@ -6749,8 +6741,7 @@ prop.type = 'group'; var key = 'G'+prop.source+prop.id, - link = $('<a>').attr('href', '#') - .attr('rel', prop.source+':'+prop.id) + link = $('<a>').attr({href: '#', rel: prop.source + ':' + prop.id}) .click(function() { return ref.command('listgroup', prop, this); }) .html(prop.name); @@ -6786,8 +6777,7 @@ newprop.type = 'group'; newnode.id = newkey; - newnode.html = $('<a>').attr('href', '#') - .attr('rel', prop.source+':'+prop.newid) + newnode.html = $('<a>').attr({href: '#', rel: prop.source + ':' + prop.newid}) .click(function() { return ref.command('listgroup', newprop, this); }) .html(prop.name); } @@ -7091,8 +7081,7 @@ this.insert_saved_search = function(name, id) { var key = 'S'+id, - link = $('<a>').attr('href', '#') - .attr('rel', id) + link = $('<a>').attr({href: '#', rel: id}) .click(function() { return ref.command('listsearch', id, this); }) .html(name), prop = { name:name, id:id }; @@ -7134,9 +7123,8 @@ // callback from server upon search-delete command this.remove_search_item = function(id) { - var li, key = 'S'+id; - if (this.savedsearchlist.remove(key)) { - this.triggerEvent('search_delete', { id:id, li:li }); + if (this.savedsearchlist.remove('S' + id)) { + this.triggerEvent('search_delete', {id: id}); } this.env.search_id = null; @@ -7824,7 +7812,7 @@ // set button to a specific state this.set_button = function(command, state) { - var n, button, obj, $obj, a_buttons = this.buttons[command], + var n, button, obj, a_buttons = this.buttons[command], len = a_buttons ? a_buttons.length : 0; for (n=0; n<len; n++) { @@ -7860,10 +7848,10 @@ obj.disabled = state == 'pas'; } else { - $obj = $(obj); - $obj - .attr('tabindex', state == 'pas' || state == 'sel' ? '-1' : ($obj.attr('data-tabindex') || '0')) - .attr('aria-disabled', state == 'pas' || state == 'sel' ? 'true' : 'false'); + $(obj).attr({ + tabindex: state == 'pas' || state == 'sel' ? '-1' : ($(obj).attr('data-tabindex') || '0'), + 'aria-disabled': state == 'pas' || state == 'sel' ? 'true' : 'false' + }); } } }; @@ -7871,20 +7859,22 @@ // display a specific alttext this.set_alttext = function(command, label) { - var n, button, obj, link, a_buttons = this.buttons[command], + var n, button, obj, link, label, + a_buttons = this.buttons[command], len = a_buttons ? a_buttons.length : 0; for (n=0; n<len; n++) { button = a_buttons[n]; obj = document.getElementById(button.id); + label = this.get_label(label); - if (button.type == 'image' && obj) { - obj.setAttribute('alt', this.get_label(label)); + if (obj && button.type == 'image') { + obj.setAttribute('alt', label); if ((link = obj.parentNode) && link.tagName.toLowerCase() == 'a') - link.setAttribute('title', this.get_label(label)); + link.setAttribute('title', label); } else if (obj) - obj.setAttribute('title', this.get_label(label)); + obj.setAttribute('title', label); } }; @@ -8576,9 +8566,9 @@ this.entity_selector('addressbook-selector', callback, combined_sources, function(obj, a) { if (obj.type == 'group') { a.attr('rel', obj.source + ':' + obj.id) - .addClass('contactgroup active') - .data({source: obj.source, gid: obj.id, id: obj.source + ':' + obj.id}) - .css('padding-left', '16px'); + .addClass('contactgroup active') + .data({source: obj.source, gid: obj.id, id: obj.source + ':' + obj.id}) + .css('padding-left', '16px'); } else { a.addClass('addressbook active').data('id', obj.id); @@ -9457,8 +9447,9 @@ $(form).attr({ target: frame_name, action: this.url(action, {_id: this.env.compose_id || '', _uploadid: ts, _from: this.env.action}), - method: 'POST'}) - .attr(form.encoding ? 'encoding' : 'enctype', 'multipart/form-data') + method: 'POST', + enctype: 'multipart/form-data' + }) .submit(); return frame_name;
View file
roundcubemail-1.4-rc2.12.tar.gz/program/js/editor.js -> roundcubemail-1.4.1.27.tar.gz/program/js/editor.js
Changed
@@ -48,7 +48,8 @@ toolbar_items_size: 'small', extended_valid_elements: 'font[face|size|color|style],span[id|class|align|style]', fontsize_formats: '8pt 9pt 10pt 11pt 12pt 14pt 18pt 24pt 36pt', - valid_children: '+body[style]', + // Allow style tag, have to be allowed inside body/div/blockquote (#7088) + valid_children: '+body[style],+blockquote[style],+div[style]', relative_urls: false, remove_script_host: false, convert_urls: false, // #1486944 @@ -134,7 +135,7 @@ $.extend(conf, window.rcmail_editor_settings); conf.setup = function(ed) { - ed.on('init', function(ed) { ref.init_callback(ed); }); + ed.on('init', function() { ref.init_callback(ed); }); // add handler for spellcheck button state update ed.on('SpellcheckStart SpellcheckEnd', function(args) { ref.spellcheck_active = args.type == 'spellcheckstart'; @@ -159,7 +160,7 @@ conf.setup_callback(ed); }; - rcmail.triggerEvent('editor-init', {config: conf, ref: ref}); + rcmail.triggerEvent('editor-init', {config: conf, ref: ref, id: id}); // textarea identifier this.id = id; @@ -169,11 +170,9 @@ tinymce.init(conf); // react to real individual tinyMCE editor init - this.init_callback = function(event) + this.init_callback = function(editor) { - this.editor = event.target; - - rcmail.triggerEvent('editor-load', {config: conf, ref: ref}); + this.editor = editor; if (rcmail.env.action == 'compose') { var area = $('#' + this.id), @@ -182,7 +181,7 @@ // the editor might be still not fully loaded, making the editing area // inaccessible, wait and try again (#1490310) if (height > 200 || height > area.height()) { - return setTimeout(function () { ref.init_callback(event); }, 300); + return setTimeout(function () { ref.init_callback(editor); }, 300); } var css = {}, @@ -212,6 +211,8 @@ } } + rcmail.triggerEvent('editor-load', {config: conf, ref: ref}); + // set tabIndex and set focus to element that was focused before ref.tabindex(ref.force_focus || (fe && fe.id == ref.id)); @@ -456,7 +457,7 @@ } // replace selection in compose textarea else if (ed = rcube_find_object(this.id)) { - var selection = $(ed).is(':focus') ? rcmail.get_input_selection(ed) : {start: 0, end: 0}, + var selection = rcmail.get_input_selection(ed), value = ed.value, pre = value.substring(0, selection.start), end = value.substring(selection.end, value.length); @@ -515,7 +516,7 @@ } // get selected text from compose textarea else if (ed = rcube_find_object(this.id)) { - if (args.selection && $(ed).is(':focus')) { + if (args.selection) { text = rcmail.get_input_selection(ed).text; }
View file
roundcubemail-1.4-rc2.12.tar.gz/program/js/list.js -> roundcubemail-1.4.1.27.tar.gz/program/js/list.js
Changed
@@ -1122,12 +1122,14 @@ /** * Select first row */ -select_first: function(mod_key) +select_first: function(mod_key, noscroll) { var row = this.get_first_row(); if (row) { this.select_row(row, mod_key, false); - this.scrollto(row); + + if (!noscroll) + this.scrollto(row); } }, @@ -1135,12 +1137,14 @@ /** * Select last row */ -select_last: function(mod_key) +select_last: function(mod_key, noscroll) { var row = this.get_last_row(); if (row) { this.select_row(row, mod_key, false); - this.scrollto(row); + + if (!noscroll) + this.scrollto(row); } }, @@ -1450,8 +1454,8 @@ case 65: // Ctrl + A if (mod_key == CONTROL_KEY && this.multiselect) { - this.select_first(); - this.select_last(SHIFT_KEY); + this.select_first(null, true); + this.select_last(SHIFT_KEY, true); return rcube_event.cancel(e); } break;
View file
roundcubemail-1.4-rc2.12.tar.gz/program/js/treelist.js -> roundcubemail-1.4.1.27.tar.gz/program/js/treelist.js
Changed
@@ -368,8 +368,14 @@ // insert as child of an existing node if (parent_node) { node.level = parent_node.level + 1; + if (!parent_node.children) parent_node.children = []; + else { + // Remove deleted nodes from the parent to make sure re-rendering below + // happens when adding a new child to a parent with all nodes removed + parent_node.children = parent_node.children.filter(function(node) { return !node.deleted; }); + } search_active = false; parent_node.children.push(node); @@ -519,8 +525,12 @@ // remove tree-toggle button and children list if (!parent.children().length) { - parent.parent().find('div.treetoggle').remove(); - parent.remove(); + parent.parent('li').find('div.treetoggle').remove(); + + // remove parent, but not if it's the list itself + if (parent[0] != container[0]) { + parent.remove(); + } } return true;
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/README.md -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/README.md
Changed
@@ -19,7 +19,7 @@ REQUIREMENTS ------------ PHP Version 5.4 or greater including: - - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required) + - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring, Ctype (required) - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required) - Libiconv, Zip, Fileinfo, Intl, Exif (recommended) - LDAP for LDAP addressbook support (optional)
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/bootstrap.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/bootstrap.php
Changed
@@ -58,7 +58,7 @@ } // framework constants -define('RCUBE_VERSION', '1.4-git'); +define('RCUBE_VERSION', '1.4.1'); define('RCUBE_CHARSET', 'UTF-8'); define('RCUBE_TEMP_FILE_PREFIX', 'RCMTEMP');
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/html.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/html.php
Changed
@@ -256,15 +256,21 @@ if (is_string($attr)) { $attr = array('src' => $attr); } + if ($cont) { - if (self::$doctype == 'xhtml') - $cont = "\n/* <![CDATA[ */\n" . $cont . "\n/* ]]> */\n"; - else - $cont = "\n" . $cont . "\n"; + if (self::$doctype == 'xhtml') { + $cont = "/* <![CDATA[ */\n{$cont}\n/* ]]> */"; + } + + $cont = "\n{$cont}\n"; + } + + if (self::$doctype == 'xhtml') { + $attr += array('type' => 'text/javascript'); } - return self::tag('script', $attr + array('type' => 'text/javascript', 'nl' => true), - $cont, array_merge(self::$common_attrib, array('src','type','charset'))); + return self::tag('script', $attr + array('nl' => true), $cont, + array_merge(self::$common_attrib, array('src', 'type', 'charset'))); } /**
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/rcube_cache.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/rcube_cache.php
Changed
@@ -156,7 +156,7 @@ * @param boolean $prefix_mode Enable it to clear all keys starting * with prefix specified in $key */ - public function remove($key=null, $prefix_mode=false) + public function remove($key = null, $prefix_mode = false) { // Remove all keys if ($key === null) { @@ -233,6 +233,33 @@ } /** + * A helper to build cache key for specified parameters. + * + * @param string $prefix Key prefix (Max. length 64 characters) + * @param array $params Additional parameters + * + * @return string Key name + */ + public static function key_name($prefix, $params = array()) + { + $cache_key = $prefix; + + if (!empty($params)) { + $func = function($v) { + if (is_array($v)) { + sort($v); + } + return is_string($v) ? $v : serialize($v); + }; + + $params = array_map($func, $params); + $cache_key .= '.' . md5(implode(':', $params)); + } + + return $cache_key; + } + + /** * Reads cache entry. * * @param string $key Cache key name
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/rcube_config.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/rcube_config.php
Changed
@@ -25,7 +25,7 @@ */ class rcube_config { - const DEFAULT_SKIN = 'larry'; + const DEFAULT_SKIN = 'elastic'; private $env = ''; private $paths = array(); @@ -227,7 +227,6 @@ } } - // larry is the new default skin :-) if ($this->prop['skin'] == 'default') { $this->prop['skin'] = self::DEFAULT_SKIN; } @@ -452,7 +451,6 @@ } } - // larry is the new default skin :-) if ($prefs['skin'] == 'default') { $prefs['skin'] = self::DEFAULT_SKIN; }
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/rcube_db.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/rcube_db.php
Changed
@@ -1184,7 +1184,6 @@ } // Find protocol and hostspec - // $dsn => proto(proto_opts)/database if (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) { $proto = $match[1]; @@ -1200,9 +1199,9 @@ && strpos($dsn, '/', 2) !== false && $parsed['phptype'] == 'oci8' ) { - //oracle's "Easy Connect" syntax: - //"username/password@[//]host[:port][/service_name]" - //e.g. "scott/tiger@//mymachine:1521/oracle" + // Oracle's "Easy Connect" syntax: + // "username/password@[//]host[:port][/service_name]" + // e.g. "scott/tiger@//mymachine:1521/oracle" $proto_opts = $dsn; $pos = strrpos($proto_opts, '/'); $dsn = substr($proto_opts, $pos + 1); @@ -1230,17 +1229,18 @@ $parsed['socket'] = $proto_opts; } - // Get dabase if any + // Get database if any // $dsn => database if ($dsn) { // /database if (($pos = strpos($dsn, '?')) === false) { $parsed['database'] = rawurldecode($dsn); - // /database?param1=value1¶m2=value2 } else { + // /database?param1=value1¶m2=value2 $parsed['database'] = rawurldecode(substr($dsn, 0, $pos)); $dsn = substr($dsn, $pos + 1); + if (strpos($dsn, '&') !== false) { $opts = explode('&', $dsn); } @@ -1255,6 +1255,18 @@ } } } + + // remove problematic suffix (#7034) + $parsed['database'] = preg_replace('/;.*$/', '', $parsed['database']); + + // Resolve relative path to the sqlite database file + // so for example it works with Roundcube Installer + if (!empty($parsed['phptype']) && !empty($parsed['database']) + && stripos($parsed['phptype'], 'sqlite') === 0 + && $parsed['database'][0] != '/' + ) { + $parsed['database'] = INSTALL_PATH . $parsed['database']; + } } return $parsed; @@ -1369,8 +1381,8 @@ } $sql = preg_replace_callback( - '/((TABLE|TRUNCATE|(?<!ON )UPDATE|INSERT INTO|FROM' - . '| ON(?! (DELETE|UPDATE))|REFERENCES|CONSTRAINT|FOREIGN KEY|INDEX)' + '/((TABLE|TRUNCATE( TABLE)?|(?<!ON )UPDATE|INSERT INTO|FROM' + . '| ON(?! (DELETE|UPDATE))|REFERENCES|CONSTRAINT|FOREIGN KEY|INDEX|UNIQUE( INDEX)?)' . '\s+(IF (NOT )?EXISTS )?[`"]*)([^`"\( \r\n]+)/', array($this, 'fix_table_names_callback'), $sql
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/rcube_imap.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/rcube_imap.php
Changed
@@ -2180,8 +2180,7 @@ // get part ID if (!empty($part[3])) { - $struct->content_id = $part[3]; - $struct->headers['content-id'] = $part[3]; + $struct->content_id = $struct->headers['content-id'] = trim($part[3]); if (empty($struct->disposition)) { $struct->disposition = 'inline'; @@ -2860,14 +2859,9 @@ * * @return array List of folders */ - public function list_folders_subscribed($root='', $name='*', $filter=null, $rights=null, $skip_sort=false) + public function list_folders_subscribed($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false) { - $cache_key = $root.':'.$name; - if (!empty($filter)) { - $cache_key .= ':'.(is_string($filter) ? $filter : serialize($filter)); - } - $cache_key .= ':'.$rights; - $cache_key = 'mailboxes.'.md5($cache_key); + $cache_key = rcube_cache::key_name('mailboxes', array($root, $name, $filter, $rights)); // get cached folder list $a_mboxes = $this->get_cache($cache_key); @@ -2997,14 +2991,9 @@ * * @return array Indexed array with folder names */ - public function list_folders($root='', $name='*', $filter=null, $rights=null, $skip_sort=false) + public function list_folders($root = '', $name = '*', $filter = null, $rights = null, $skip_sort = false) { - $cache_key = $root.':'.$name; - if (!empty($filter)) { - $cache_key .= ':'.(is_string($filter) ? $filter : serialize($filter)); - } - $cache_key .= ':'.$rights; - $cache_key = 'mailboxes.list.'.md5($cache_key); + $cache_key = rcube_cache::key_name('mailboxes.list', array($root, $name, $filter, $rights)); // get cached folder list $a_mboxes = $this->get_cache($cache_key); @@ -3717,7 +3706,7 @@ } // get cached metadata - $cache_key = 'mailboxes.folder-info.' . $folder; + $cache_key = rcube_cache::key_name('mailboxes.folder-info', array($folder)); $cached = $this->get_cache($cache_key); if (is_array($cached)) { @@ -3887,7 +3876,7 @@ return false; } - $this->clear_cache('mailboxes.folder-info.' . $folder); + $this->clear_cache(rcube_cache::key_name('mailboxes.folder-info', array($folder))); return $this->conn->setACL($folder, $user, $acl); } @@ -4064,13 +4053,7 @@ $entries = (array) $entries; if (!$force) { - // create cache key - // @TODO: this is the simplest solution, but we do the same with folders list - // maybe we should store data per-entry and merge on request - sort($options); - sort($entries); - $cache_key = 'mailboxes.metadata.' . $folder; - $cache_key .= '.' . md5(serialize($options).serialize($entries)); + $cache_key = rcube_cache::key_name('mailboxes.metadata', array($folder, $options, $entries)); // get cached data $cached_data = $this->get_cache($cache_key);
View file
roundcubemail-1.4-rc2.12.tar.gz/program/lib/Roundcube/rcube_ldap.php -> roundcubemail-1.4.1.27.tar.gz/program/lib/Roundcube/rcube_ldap.php
Changed
@@ -339,7 +339,7 @@ $search_base_dn = strtr($conf['search_base_dn'], $replaces); $search_filter = strtr($conf['search_filter'], $replaces); - $cache_key = 'DN.' . md5("$host:$search_bind_dn:$search_base_dn:$search_filter:" . $conf['search_bind_pw']); + $cache_key = rcube_cache::key_name('DN', array($host, $search_bind_dn, $search_base_dn, $search_filter, $conf['search_bind_pw'])); if ($this->cache && ($dn = $this->cache->get($cache_key))) { $replaces['%dn'] = $dn;
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/bg_BG/labels.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/bg_BG/labels.inc
Changed
@@ -145,7 +145,7 @@ $labels['first'] = 'Първо'; $labels['last'] = 'Последно'; $labels['previous'] = 'Предишно'; -$labels['next'] = 'Сладващо'; +$labels['next'] = 'Следващо'; $labels['select'] = 'Избери'; $labels['selection'] = 'Селекция'; $labels['all'] = 'Всички';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/bg_BG/timezones.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/bg_BG/timezones.inc
Changed
@@ -21,14 +21,53 @@ $labels['tz:africa:addis_ababa'] = 'Адис Абеба'; $labels['tz:africa:algiers'] = 'Алжир'; $labels['tz:africa:asmara'] = 'Асмара'; +$labels['tz:africa:bamako'] = 'Бамако'; +$labels['tz:africa:bangui'] = 'Бангуи'; +$labels['tz:africa:banjul'] = 'Банджул'; +$labels['tz:africa:bissau'] = 'Бисау'; +$labels['tz:africa:blantyre'] = 'Блантайър'; +$labels['tz:africa:brazzaville'] = 'Бразавил'; +$labels['tz:africa:bujumbura'] = 'Бужумбура'; $labels['tz:africa:cairo'] = 'Кайро'; $labels['tz:africa:casablanca'] = 'Казабланка'; $labels['tz:africa:ceuta'] = 'Сеута'; $labels['tz:africa:conakry'] = 'Конакри'; $labels['tz:africa:dakar'] = 'Дакар'; +$labels['tz:africa:dar_es_salaam'] = 'Дар ес Салаам'; +$labels['tz:africa:djibouti'] = 'Джибути'; +$labels['tz:africa:douala'] = 'Дуала'; +$labels['tz:africa:el_aaiun'] = 'Ел-Аюн'; +$labels['tz:africa:freetown'] = 'Фрийтаун'; +$labels['tz:africa:gaborone'] = 'Габороне'; +$labels['tz:africa:harare'] = 'Хараре'; +$labels['tz:africa:johannesburg'] = 'Йоханесбург'; +$labels['tz:africa:juba'] = 'Джуба'; +$labels['tz:africa:kampala'] = 'Кампала'; +$labels['tz:africa:khartoum'] = 'Хартум'; +$labels['tz:africa:kigali'] = 'Кигали'; +$labels['tz:africa:kinshasa'] = 'Киншаса'; $labels['tz:africa:lagos'] = 'Лагос'; +$labels['tz:africa:libreville'] = 'Либревил'; +$labels['tz:africa:lome'] = 'Ломе'; +$labels['tz:africa:luanda'] = 'Луанда'; +$labels['tz:africa:lubumbashi'] = 'Лубумбаши'; +$labels['tz:africa:lusaka'] = 'Лусака'; +$labels['tz:africa:malabo'] = 'Малабо'; +$labels['tz:africa:maputo'] = 'Мапуто'; +$labels['tz:africa:maseru'] = 'Масеру'; +$labels['tz:africa:mbabane'] = 'Мбабане'; +$labels['tz:africa:mogadishu'] = 'Могадишу'; +$labels['tz:africa:monrovia'] = 'Монровия'; +$labels['tz:africa:nairobi'] = 'Найроби'; +$labels['tz:africa:ndjamena'] = 'Нджамена'; +$labels['tz:africa:niamey'] = 'Ниамей'; +$labels['tz:africa:nouakchott'] = 'Нуакшот'; +$labels['tz:africa:ouagadougou'] = 'Уагадугу'; +$labels['tz:africa:porto-novo'] = 'Порто-Ново'; +$labels['tz:africa:sao_tome'] = 'Сао Томе'; $labels['tz:africa:tripoli'] = 'Триполи'; $labels['tz:africa:tunis'] = 'Тунис'; +$labels['tz:africa:windhoek'] = 'Уиндхоек'; $labels['tz:america'] = 'Америка'; $labels['tz:america:argentina'] = 'Аржентина'; $labels['tz:america:argentina:buenos_aires'] = 'Буенос Айрес'; @@ -91,6 +130,7 @@ $labels['tz:europe'] = 'Европа'; $labels['tz:europe:amsterdam'] = 'Амстердам'; $labels['tz:europe:andorra'] = 'Андора'; +$labels['tz:europe:astrakhan'] = 'Астрахан'; $labels['tz:europe:athens'] = 'Атина'; $labels['tz:europe:belgrade'] = 'Белград'; $labels['tz:europe:berlin'] = 'Берлин'; @@ -98,9 +138,12 @@ $labels['tz:europe:brussels'] = 'Брюксел'; $labels['tz:europe:bucharest'] = 'Букурещ'; $labels['tz:europe:budapest'] = 'Будапеща'; +$labels['tz:europe:busingen'] = 'Бюзинген'; +$labels['tz:europe:chisinau'] = 'Кишинев'; $labels['tz:europe:copenhagen'] = 'Копенхаген'; $labels['tz:europe:dublin'] = 'Дъблин'; $labels['tz:europe:gibraltar'] = 'Гибралтар'; +$labels['tz:europe:guernsey'] = 'Гърнзи'; $labels['tz:europe:helsinki'] = 'Хелзинки'; $labels['tz:europe:isle_of_man'] = 'Остров Ман'; $labels['tz:europe:istanbul'] = 'Истанбул'; @@ -114,6 +157,7 @@ $labels['tz:europe:luxembourg'] = 'Люксембург'; $labels['tz:europe:madrid'] = 'Мадрид'; $labels['tz:europe:malta'] = 'Малта'; +$labels['tz:europe:mariehamn'] = 'Мариехамн'; $labels['tz:europe:minsk'] = 'Минск'; $labels['tz:europe:monaco'] = 'Монако'; $labels['tz:europe:moscow'] = 'Москва'; @@ -153,3 +197,4 @@ $labels['tz:pacific:honolulu'] = 'Хонолулу'; $labels['tz:pacific:midway'] = 'Мидуей'; $labels['tz:pacific:norfolk'] = 'Норфолк'; +$labels['tz:pacific:wallis'] = 'Уолис';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/is_IS/labels.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/is_IS/labels.inc
Changed
@@ -169,6 +169,7 @@ $labels['expand-unread'] = 'Þenja ólesið'; $labels['collapse-all'] = 'Fella allt saman'; $labels['threaded'] = 'Þrætt'; +$labels['showunread'] = 'Birta ólesin skilaboð'; $labels['autoexpand_threads'] = 'Þenja skilaboðaþræði út'; $labels['do_expand'] = 'allir þræðir'; $labels['expand_only_unread'] = 'aðeins ólesin skilaboð'; @@ -510,6 +511,7 @@ $labels['toggleadvancedoptions'] = 'Víxla ítarlegum valkostum af/á'; $labels['focusonnewmessage'] = 'Láta vafraglugga vera virkan á nýjum skilaboðum'; $labels['checkallfolders'] = 'Athuga með ný skilaboð í öllum möppum'; +$labels['displaynext'] = 'Birta næstu færslu í lista eftir að skilaboðum er eytt/færð'; $labels['defaultfont'] = 'Sjálfgefið letur HTML-skilaboða'; $labels['mainoptions'] = 'Aðalstillingar'; $labels['browseroptions'] = 'Valkostir vafra';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/pl_PL/timezones.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/pl_PL/timezones.inc
Changed
@@ -48,6 +48,7 @@ $labels['tz:africa:kinshasa'] = 'Kinszasa'; $labels['tz:africa:lagos'] = 'Lagos'; $labels['tz:africa:libreville'] = 'Libreville'; +$labels['tz:africa:lome'] = 'Lome'; $labels['tz:africa:luanda'] = 'Luanda'; $labels['tz:africa:lubumbashi'] = 'Lubumbashi'; $labels['tz:africa:lusaka'] = 'Lusaka'; @@ -63,6 +64,7 @@ $labels['tz:africa:nouakchott'] = 'Nawakszut'; $labels['tz:africa:ouagadougou'] = 'Wagadugu'; $labels['tz:africa:porto-novo'] = 'Porto-Novo'; +$labels['tz:africa:sao_tome'] = 'Sao Tome'; $labels['tz:africa:tripoli'] = 'Trypolis'; $labels['tz:africa:tunis'] = 'Tunis'; $labels['tz:africa:windhoek'] = 'Windhuk'; @@ -73,7 +75,11 @@ $labels['tz:america:antigua'] = 'Antigua'; $labels['tz:america:araguaina'] = 'Araguaina'; $labels['tz:america:argentina'] = 'Argentyna'; +$labels['tz:america:argentina:buenos_aires'] = 'Buenos Aires'; +$labels['tz:america:argentina:san_juan'] = 'San Juan'; +$labels['tz:america:argentina:san_luis'] = 'San Luis'; $labels['tz:america:aruba'] = 'Aruba'; +$labels['tz:america:asuncion'] = 'Asuncion'; $labels['tz:america:atikokan'] = 'Atikokan'; $labels['tz:america:bahia'] = 'Bahia'; $labels['tz:america:bahia_banderas'] = 'Bahia Banderas'; @@ -119,6 +125,7 @@ $labels['tz:america:havana'] = 'Hawana'; $labels['tz:america:hermosillo'] = 'Hermosillo'; $labels['tz:america:indiana'] = 'Indiana'; +$labels['tz:america:indiana:indianapolis'] = 'Indianapolis'; $labels['tz:america:indiana:petersburg'] = 'Petersburg'; $labels['tz:america:inuvik'] = 'Inuvik'; $labels['tz:america:iqaluit'] = 'Iqaluit';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/pt_BR/labels.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/pt_BR/labels.inc
Changed
@@ -169,6 +169,7 @@ $labels['expand-unread'] = 'Expandir Não Lidas'; $labels['collapse-all'] = 'Recolher Tudo'; $labels['threaded'] = 'Agrupado'; +$labels['showunread'] = 'Mostrar mensagens não lidas'; $labels['autoexpand_threads'] = 'Expandir mensagens agrupadas'; $labels['do_expand'] = 'todos os grupos'; $labels['expand_only_unread'] = 'somente com mensagem(s) não lidas'; @@ -510,6 +511,7 @@ $labels['toggleadvancedoptions'] = 'Ativar opções avançadas'; $labels['focusonnewmessage'] = 'Focar janela do navegador ao receber nova mensagem'; $labels['checkallfolders'] = 'Verificar se há novas mensagens em todas as pastas'; +$labels['displaynext'] = 'Mostrar próximo item da lista após excluir/mover'; $labels['defaultfont'] = 'Fonte padrão para mensagens HTML'; $labels['mainoptions'] = 'Opções Principais'; $labels['browseroptions'] = 'Opções do navegador';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/ru_RU/labels.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/ru_RU/labels.inc
Changed
@@ -169,6 +169,7 @@ $labels['expand-unread'] = 'Развернуть непрочитанные'; $labels['collapse-all'] = 'Свернуть все'; $labels['threaded'] = 'Обсуждения'; +$labels['showunread'] = 'Показать непрочитанные сообщения'; $labels['autoexpand_threads'] = 'Развернуть обсуждения'; $labels['do_expand'] = 'все обсуждения'; $labels['expand_only_unread'] = 'только с непрочитанными сообщениями'; @@ -510,6 +511,7 @@ $labels['toggleadvancedoptions'] = 'Дополнительные параметры'; $labels['focusonnewmessage'] = 'Фокусировать окно браузера при новом сообщении'; $labels['checkallfolders'] = 'Проверять новые сообщения во всех папках'; +$labels['displaynext'] = 'Показать следующую запись списка после удаления/перемещения'; $labels['defaultfont'] = 'Шрифт по умолчанию HTML сообщения'; $labels['mainoptions'] = 'Основные настройки'; $labels['browseroptions'] = 'Настройки обозревателя';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/localization/sv_SE/labels.inc -> roundcubemail-1.4.1.27.tar.gz/program/localization/sv_SE/labels.inc
Changed
@@ -169,6 +169,7 @@ $labels['expand-unread'] = 'Visa olästa'; $labels['collapse-all'] = 'Dölj alla'; $labels['threaded'] = 'Trådat'; +$labels['showunread'] = 'Visa olästa meddelanden'; $labels['autoexpand_threads'] = 'Visa trådade meddelanden'; $labels['do_expand'] = 'Alla trådar'; $labels['expand_only_unread'] = 'Trådar med olästa meddelanden'; @@ -510,6 +511,7 @@ $labels['toggleadvancedoptions'] = 'Växla avancerade inställningar'; $labels['focusonnewmessage'] = 'Fokusera webbläsarens fönster vid nytt meddelande'; $labels['checkallfolders'] = 'Genomsök samtliga kataloger efter nya meddelanden'; +$labels['displaynext'] = 'Visa nästa i listan efter ta bort eller flytta'; $labels['defaultfont'] = 'Förvalt typsnitt i HTML-meddelande'; $labels['mainoptions'] = 'Huvudalternativ'; $labels['browseroptions'] = 'Webbläsaralternativ';
View file
roundcubemail-1.4-rc2.12.tar.gz/program/steps/mail/folders.inc -> roundcubemail-1.4.1.27.tar.gz/program/steps/mail/folders.inc
Changed
@@ -59,6 +59,13 @@ if ($success) { $OUTPUT->show_message('folderpurged', 'confirmation'); + $OUTPUT->command('set_unread_count', $mbox, 0); + rcmail_set_unseen_count($mbox, 0); + + // set trash folder state + if ($mbox === $trash_mbox) { + $OUTPUT->command('set_trash_count', 0); + } if (!empty($_REQUEST['_reload'])) { $OUTPUT->set_env('messagecount', 0); @@ -66,14 +73,7 @@ $OUTPUT->set_env('exists', 0); $OUTPUT->command('message_list.clear'); $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text(), $mbox); - $OUTPUT->command('set_unread_count', $mbox, 0); $OUTPUT->command('set_quota', $RCMAIL->quota_content(null, $mbox)); - rcmail_set_unseen_count($mbox, 0); - - // set trash folder state - if ($mbox === $trash_mbox) { - $OUTPUT->command('set_trash_count', 0); - } } } else {
View file
roundcubemail-1.4-rc2.12.tar.gz/program/steps/mail/func.inc -> roundcubemail-1.4.1.27.tar.gz/program/steps/mail/func.inc
Changed
@@ -1704,11 +1704,11 @@ $input_attr = array( 'multiple' => true, 'name' => '_file[]', - 'accept' => '.eml, .mbox, .msg, message/rfc822, text/*', + 'accept' => '.eml,.mbox,.msg,message/rfc822,text/*', ); if (class_exists('ZipArchive', false)) { - $input_attr['accept'] .= '.zip, application/zip, application/x-zip'; + $input_attr['accept'] .= '.zip,application/zip,application/x-zip'; $description .= ' ' . $RCMAIL->gettext('mailimportzip'); }
View file
roundcubemail-1.4-rc2.12.tar.gz/program/steps/mail/sendmail.inc -> roundcubemail-1.4.1.27.tar.gz/program/steps/mail/sendmail.inc
Changed
@@ -168,7 +168,7 @@ unset($COMPOSE['attachments'][$idx]); } - $COMPOSE['attachments'] = array_merge(array_filter($files), $COMPOSE['attachments']); + $COMPOSE['attachments'] = array_merge(array_filter($files), (array) $COMPOSE['attachments']); } // Since we can handle big messages with disk usage, we need more time to work
View file
roundcubemail-1.4-rc2.12.tar.gz/public_html/index.php -> roundcubemail-1.4.1.27.tar.gz/public_html/index.php
Changed
@@ -3,7 +3,7 @@ /* +-----------------------------------------------------------------------+ | Roundcube Webmail IMAP Client | - | Version 1.4-git | + | Version 1.4.1 | | | | Copyright (C) The Roundcube Dev Team | | |
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/README.md -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/README.md
Changed
@@ -28,7 +28,7 @@ ------------ All styles are written using LESS syntax. Thus it needs to be compiled -using the `lessc` command line tool. This comes with the `nodejs-less` +using the `lessc` (>= 1.5.0) command line tool. This comes with the `nodejs-less` RPM package which depends on nodejs. ``` $ lessc -x styles/styles.less > styles/styles.css
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/deps/bootstrap.bundle.min.js -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/deps/bootstrap.bundle.min.js
Changed
@@ -4,4 +4,3 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t=t||self).bootstrap={},t.jQuery)}(this,function(t,p){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var e="transitionend";function n(t){var e=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(e)},t),this}var m={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=p(t).css("transition-duration"),n=p(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){p(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&m.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?m.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};p.fn.emulateTransitionEnd=n,p.event.special[m.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(p(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=p.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},u="alert",f="fade",d="show",g=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){p.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=m.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=p(t).closest("."+u)[0]),n},t._triggerCloseEvent=function(t){var e=p.Event(h.CLOSE);return p(t).trigger(e),e},t._removeElement=function(e){var n=this;if(p(e).removeClass(d),p(e).hasClass(f)){var t=m.getTransitionDurationFromElement(e);p(e).one(m.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){p(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(r);e||(e=new i(this),t.data(r,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();p(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),p.fn[o]=g._jQueryInterface,p.fn[o].Constructor=g,p.fn[o].noConflict=function(){return p.fn[o]=c,g._jQueryInterface};var _="button",v="bs.button",y="."+v,E=".data-api",b=p.fn[_],w="active",C="btn",T="focus",S='[data-toggle^="button"]',D='[data-toggle="buttons"]',I='input:not([type="hidden"])',A=".active",O=".btn",N={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:"focus"+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=p(this._element).closest(D)[0];if(n){var i=this._element.querySelector(I);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(w))t=!1;else{var o=n.querySelector(A);o&&p(o).removeClass(w)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(w),p(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(w)),t&&p(this._element).toggleClass(w)},t.dispose=function(){p.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(v);t||(t=new n(this),p(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),n}();p(document).on(N.CLICK_DATA_API,S,function(t){t.preventDefault();var e=t.target;p(e).hasClass(C)||(e=p(e).closest(O)),k._jQueryInterface.call(p(e),"toggle")}).on(N.FOCUS_BLUR_DATA_API,S,function(t){var e=p(t.target).closest(O)[0];p(e).toggleClass(T,/^focus(in)?$/.test(t.type))}),p.fn[_]=k._jQueryInterface,p.fn[_].Constructor=k,p.fn[_].noConflict=function(){return p.fn[_]=b,k._jQueryInterface};var L="carousel",x="bs.carousel",P="."+x,H=".data-api",j=p.fn[L],R={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},M="next",W="prev",U="left",B="right",q={SLIDE:"slide"+P,SLID:"slid"+P,KEYDOWN:"keydown"+P,MOUSEENTER:"mouseenter"+P,MOUSELEAVE:"mouseleave"+P,TOUCHSTART:"touchstart"+P,TOUCHMOVE:"touchmove"+P,TOUCHEND:"touchend"+P,POINTERDOWN:"pointerdown"+P,POINTERUP:"pointerup"+P,DRAG_START:"dragstart"+P,LOAD_DATA_API:"load"+P+H,CLICK_DATA_API:"click"+P+H},K="carousel",Q="active",V="slide",Y="carousel-item-right",z="carousel-item-left",X="carousel-item-next",G="carousel-item-prev",$="pointer-event",J=".active",Z=".active.carousel-item",tt=".carousel-item",et=".carousel-item img",nt=".carousel-item-next, .carousel-item-prev",it=".carousel-indicators",ot="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',st={TOUCH:"touch",PEN:"pen"},at=function(){function r(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(it),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(M)},t.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(W)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(nt)&&(m.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(Z);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)p(this._element).one(q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?M:W;this._slide(i,this._items[t])}},t.dispose=function(){p(this._element).off(P),p.removeData(this._element,x),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},R,t),m.typeCheckConfig(L,t,F),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&p(this._element).on(q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&p(this._element).on(q.MOUSEENTER,function(t){return e.pause(t)}).on(q.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&st[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};p(this._element.querySelectorAll(et)).on(q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(p(this._element).on(q.POINTERDOWN,function(t){return e(t)}),p(this._element).on(q.POINTERUP,function(t){return i(t)}),this._element.classList.add($)):(p(this._element).on(q.TOUCHSTART,function(t){return e(t)}),p(this._element).on(q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),p(this._element).on(q.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===M,i=t===W,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===W?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(Z)),o=p.Event(q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return p(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(J));p(e).removeClass(Q);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&p(n).addClass(Q)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(Z),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===M?(n=z,i=X,U):(n=Y,i=G,B),l&&p(l).hasClass(Q))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=p.Event(q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(V)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(Q),p(s).removeClass(Q+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(Q),p(l).addClass(Q),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=p(this).data(x),e=l({},R,p(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),p(this).data(x,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=m.getSelectorFromElement(this);if(e){var n=p(e)[0];if(n&&p(n).hasClass(K)){var i=l({},p(n).data(),p(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(p(n),i),o&&p(n).data(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return R}}]),r}();p(document).on(q.CLICK_DATA_API,ot,at._dataApiClickHandler),p(window).on(q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=p(t[e]);at._jQueryInterface.call(i,i.data())}}),p.fn[L]=at._jQueryInterface,p.fn[L].Constructor=at,p.fn[L].noConflict=function(){return p.fn[L]=j,at._jQueryInterface};var lt="collapse",ct="bs.collapse",ht="."+ct,ut=p.fn[lt],ft={toggle:!0,parent:""},dt={toggle:"boolean",parent:"(string|element)"},pt={SHOW:"show"+ht,SHOWN:"shown"+ht,HIDE:"hide"+ht,HIDDEN:"hidden"+ht,CLICK_DATA_API:"click"+ht+".data-api"},mt="show",gt="collapse",_t="collapsing",vt="collapsed",yt="width",Et="height",bt=".show, .collapsing",wt='[data-toggle="collapse"]',Ct=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(wt)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){p(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(bt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(gt)})).length&&(t=null),!(t&&(e=p(t).not(this._selector).data(ct))&&e._isTransitioning))){var i=p.Event(pt.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(p(t).not(this._selector),"hide"),e||p(t).data(ct,null));var o=this._getDimension();p(this._element).removeClass(gt).addClass(_t),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(vt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){p(n._element).removeClass(_t).addClass(gt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(pt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&p(this._element).hasClass(mt)){var e=p.Event(pt.HIDE);if(p(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(_t).removeClass(gt).removeClass(mt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=m.getSelectorFromElement(r);if(null!==s)p([].slice.call(document.querySelectorAll(s))).hasClass(mt)||p(r).addClass(vt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){t.setTransitioning(!1),p(t._element).removeClass(_t).addClass(gt).trigger(pt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){p.removeData(this._element,ct),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ft,t)).toggle=Boolean(t.toggle),m.typeCheckConfig(lt,t,dt),t},t._getDimension=function(){return p(this._element).hasClass(yt)?yt:Et},t._getParent=function(){var t,n=this;m.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return p(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=p(t).hasClass(mt);e.length&&p(e).toggleClass(vt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=m.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=p(this),e=t.data(ct),n=l({},ft,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(ct,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return ft}}]),a}();p(document).on(pt.CLICK_DATA_API,wt,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=p(this),e=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));p(i).each(function(){var t=p(this),e=t.data(ct)?"toggle":n.data();Ct._jQueryInterface.call(t,e)})}),p.fn[lt]=Ct._jQueryInterface,p.fn[lt].Constructor=Ct,p.fn[lt].noConflict=function(){return p.fn[lt]=ut,Ct._jQueryInterface};for(var Tt="undefined"!=typeof window&&"undefined"!=typeof document,St=["Edge","Trident","Firefox"],Dt=0,It=0;It<St.length;It+=1)if(Tt&&0<=navigator.userAgent.indexOf(St[It])){Dt=1;break}var At=Tt&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then(function(){e=!1,t()}))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout(function(){e=!1,t()},Dt))}};function Ot(t){return t&&"[object Function]"==={}.toString.call(t)}function Nt(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function kt(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function Lt(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=Nt(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:Lt(kt(t))}var xt=Tt&&!(!window.MSInputMethodContext||!document.documentMode),Pt=Tt&&/MSIE 10/.test(navigator.userAgent);function Ht(t){return 11===t?xt:10===t?Pt:xt||Pt}function jt(t){if(!t)return document.documentElement;for(var e=Ht(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===Nt(n,"position")?jt(n):n:t?t.ownerDocument.documentElement:document.documentElement}function Rt(t){return null!==t.parentNode?Rt(t.parentNode):t}function Ft(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&jt(s.firstElementChild)!==s?jt(l):l;var c=Rt(t);return c.host?Ft(c.host,e):Ft(t,Rt(e).host)}function Mt(t){var e="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=t.nodeName;if("BODY"!==n&&"HTML"!==n)return t[e];var i=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||i)[e]}function Wt(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"],10)+parseFloat(t["border"+i+"Width"],10)}function Ut(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],Ht(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function Bt(t){var e=t.body,n=t.documentElement,i=Ht(10)&&getComputedStyle(n);return{height:Ut("Height",e,n,i),width:Ut("Width",e,n,i)}}var qt=function(){function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}}(),Kt=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},Qt=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function Vt(t){return Qt({},t,{right:t.left+t.width,bottom:t.top+t.height})}function Yt(t){var e={};try{if(Ht(10)){e=t.getBoundingClientRect();var n=Mt(t,"top"),i=Mt(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?Bt(t.ownerDocument):{},s=r.width||t.clientWidth||o.right-o.left,a=r.height||t.clientHeight||o.bottom-o.top,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var h=Nt(t);l-=Wt(h,"x"),c-=Wt(h,"y"),o.width-=l,o.height-=c}return Vt(o)}function zt(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Ht(10),o="HTML"===e.nodeName,r=Yt(t),s=Yt(e),a=Lt(t),l=Nt(e),c=parseFloat(l.borderTopWidth,10),h=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var u=Vt({top:r.top-s.top-c,left:r.left-s.left-h,width:r.width,height:r.height});if(u.marginTop=0,u.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);u.top-=c-f,u.bottom-=c-f,u.left-=h-d,u.right-=h-d,u.marginTop=f,u.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(u=function(t,e){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Mt(e,"top"),o=Mt(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}(u,e)),u}function Xt(t){if(!t||!t.parentElement||Ht())return document.documentElement;for(var e=t.parentElement;e&&"none"===Nt(e,"transform");)e=e.parentElement;return e||document.documentElement}function Gt(t,e,n,i){var o=4<arguments.length&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?Xt(t):Ft(t,e);if("viewport"===i)r=function(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=zt(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:Mt(n),a=e?0:Mt(n,"left");return Vt({top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r})}(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=Lt(kt(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=zt(a,s,o);if("HTML"!==a.nodeName||function t(e){var n=e.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===Nt(e,"position"))return!0;var i=kt(e);return!!i&&t(i)}(s))r=l;else{var c=Bt(t.ownerDocument),h=c.height,u=c.width;r.top+=l.top-l.marginTop,r.bottom=h+l.top,r.left+=l.left-l.marginLeft,r.right=u+l.left}}var f="number"==typeof(n=n||0);return r.left+=f?n:n.left||0,r.top+=f?n:n.top||0,r.right-=f?n:n.right||0,r.bottom-=f?n:n.bottom||0,r}function $t(t,e,i,n,o){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=Gt(i,n,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map(function(t){return Qt({key:t},a[t],{area:(e=a[t],e.width*e.height)});var e}).sort(function(t,e){return e.area-t.area}),c=l.filter(function(t){var e=t.width,n=t.height;return e>=i.clientWidth&&n>=i.clientHeight}),h=0<c.length?c[0].key:l[0].key,u=t.split("-")[1];return h+(u?"-"+u:"")}function Jt(t,e,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return zt(n,i?Xt(e):Ft(e,n),i)}function Zt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function te(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,function(t){return e[t]})}function ee(t,e,n){n=n.split("-")[0];var i=Zt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-i[l]/2,o[a]=n===a?e[a]-i[c]:e[te(a)],o}function ne(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ie(t,n,e){return(void 0===e?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex(function(t){return t[e]===n});var i=ne(t,function(t){return t[e]===n});return t.indexOf(i)}(t,"name",e))).forEach(function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var e=t.function||t.fn;t.enabled&&Ot(e)&&(n.offsets.popper=Vt(n.offsets.popper),n.offsets.reference=Vt(n.offsets.reference),n=e(n,t))}),n}function oe(t,n){return t.some(function(t){var e=t.name;return t.enabled&&e===n})}function re(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function se(t){var e=t.ownerDocument;return e?e.defaultView:window}function ae(t,e,n,i){n.updateBound=i,se(t).addEventListener("resize",n.updateBound,{passive:!0});var o=Lt(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,s=r?e.ownerDocument.defaultView:e;s.addEventListener(n,i,{passive:!0}),r||t(Lt(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function le(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,se(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach(function(t){t.removeEventListener("scroll",e.updateBound)}),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function ce(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function he(n,i){Object.keys(i).forEach(function(t){var e="";-1!==["width","height","top","right","bottom","left"].indexOf(t)&&ce(i[t])&&(e="px"),n.style[t]=i[t]+e})}var ue=Tt&&/Firefox/i.test(navigator.userAgent);function fe(t,e,n){var i=ne(t,function(t){return t.name===e}),o=!!i&&t.some(function(t){return t.name===n&&t.enabled&&t.order<i.order});if(!o){var r="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var de=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],pe=de.slice(3);function me(t){var e=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=pe.indexOf(t),i=pe.slice(n+1).concat(pe.slice(0,n));return e?i.reverse():i}var ge="flip",_e="clockwise",ve="counterclockwise";function ye(t,o,r,e){var s=[0,0],a=-1!==["right","left"].indexOf(e),n=t.split(/(\+|\-)/).map(function(t){return t.trim()}),i=n.indexOf(ne(n,function(t){return-1!==t.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(t,e){var n=(1===e?!a:a)?"height":"width",i=!1;return t.reduce(function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,i=!0,t):i?(t[t.length-1]+=e,i=!1,t):t.concat(e)},[]).map(function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0!==s.indexOf("%"))return"vh"!==s&&"vw"!==s?r:("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Vt(a)[e]/100*r}(t,n,o,r)})})).forEach(function(n,i){n.forEach(function(t,e){ce(t)&&(s[i]+=t*("-"===n[e-1]?-1:1))})}),s}var Ee={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",h={start:Kt({},l,r[l]),end:Kt({},l,r[l]+r[c]-s[c])};t.offsets.popper=Qt({},s,h[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=ce(+n)?[+n,0]:ye(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,i){var e=i.boundariesElement||jt(t.instance.popper);t.instance.reference===e&&(e=jt(e));var n=re("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Gt(t.instance.popper,t.instance.reference,i.padding,e,t.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=t.offsets.popper,u={primary:function(t){var e=h[t];return h[t]<l[t]&&!i.escapeWithReference&&(e=Math.max(h[t],l[t])),Kt({},t,e)},secondary:function(t){var e="right"===t?"left":"top",n=h[e];return h[t]>l[t]&&!i.escapeWithReference&&(n=Math.min(h[e],l[t]-("right"===t?h.width:h.height))),Kt({},e,n)}};return c.forEach(function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";h=Qt({},h,u[e](t))}),t.offsets.popper=h,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(t.offsets.popper[l]=r(i[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!fe(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=Zt(i)[c];a[d]-p<s[u]&&(t.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(t.offsets.popper[u]+=a[u]+p-s[d]),t.offsets.popper=Vt(t.offsets.popper);var m=a[u]+a[c]/2-p/2,g=Nt(t.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-t.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),t.arrowElement=i,t.offsets.arrow=(Kt(n={},u,Math.round(y)),Kt(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(oe(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=Gt(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=te(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case ge:E=[_,v];break;case _e:E=me(_);break;case ve:E=me(_,!0);break;default:E=m.behavior}return E.forEach(function(t,e){if(_!==t||E.length===e+1)return p;_=p.placement.split("-")[0],v=te(_);var n,i=p.offsets.popper,o=p.offsets.reference,r=Math.floor,s="left"===_&&r(i.right)>r(o.left)||"right"===_&&r(i.left)<r(o.right)||"top"===_&&r(i.bottom)>r(o.top)||"bottom"===_&&r(i.top)<r(o.bottom),a=r(i.left)<r(g.left),l=r(i.right)>r(g.right),c=r(i.top)<r(g.top),h=r(i.bottom)>r(g.bottom),u="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&h,f=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(f&&"start"===y&&a||f&&"end"===y&&l||!f&&"start"===y&&c||!f&&"end"===y&&h);(s||u||d)&&(p.flipped=!0,(s||u)&&(_=E[e+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=Qt({},p.offsets.popper,ee(p.instance.popper,p.offsets.reference,p.placement)),p=ie(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),t.placement=te(e),t.offsets.popper=Vt(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!fe(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=ne(t.instance.modifiers,function(t){return"preventOverflow"===t.name}).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=ne(t.instance.modifiers,function(t){return"applyStyle"===t.name}).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s,a,l,c,h,u,f,d,p,m,g,_,v,y,E=void 0!==r?r:e.gpuAcceleration,b=jt(t.instance.popper),w=Yt(b),C={position:o.position},T=(s=t,a=window.devicePixelRatio<2||!ue,l=s.offsets,c=l.popper,h=l.reference,u=Math.round,f=Math.floor,d=function(t){return t},p=u(h.width),m=u(c.width),g=-1!==["left","right"].indexOf(s.placement),_=-1!==s.placement.indexOf("-"),y=a?u:d,{left:(v=a?g||_||p%2==m%2?u:f:d)(p%2==1&&m%2==1&&!_&&a?c.left-1:c.left),top:y(c.top),bottom:y(c.bottom),right:v(c.right)}),S="bottom"===n?"top":"bottom",D="right"===i?"left":"right",I=re("transform"),A=void 0,O=void 0;if(O="bottom"===S?"HTML"===b.nodeName?-b.clientHeight+T.bottom:-w.height+T.bottom:T.top,A="right"===D?"HTML"===b.nodeName?-b.clientWidth+T.right:-w.width+T.right:T.left,E&&I)C[I]="translate3d("+A+"px, "+O+"px, 0)",C[S]=0,C[D]=0,C.willChange="transform";else{var N="bottom"===S?-1:1,k="right"===D?-1:1;C[S]=O*N,C[D]=A*k,C.willChange=S+", "+D}var L={"x-placement":t.placement};return t.attributes=Qt({},L,t.attributes),t.styles=Qt({},C,t.styles),t.arrowStyles=Qt({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return he(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach(function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)}),t.arrowElement&&Object.keys(t.arrowStyles).length&&he(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=Jt(o,e,t,n.positionFixed),s=$t(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),he(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},be=function(){function r(t,e){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=At(this.update.bind(this)),this.options=Qt({},r.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=e&&e.jquery?e[0]:e,this.options.modifiers={},Object.keys(Qt({},r.Defaults.modifiers,i.modifiers)).forEach(function(t){n.options.modifiers[t]=Qt({},r.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(t){return Qt({name:t},n.options.modifiers[t])}).sort(function(t,e){return t.order-e.order}),this.modifiers.forEach(function(t){t.enabled&&Ot(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}return qt(r,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=Jt(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=$t(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=ee(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ie(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,oe(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[re("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ae(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return le.call(this)}}]),r}();be.Utils=("undefined"!=typeof window?window:global).PopperUtils,be.placements=de,be.Defaults=Ee;var we="dropdown",Ce="bs.dropdown",Te="."+Ce,Se=".data-api",De=p.fn[we],Ie=new RegExp("38|40|27"),Ae={HIDE:"hide"+Te,HIDDEN:"hidden"+Te,SHOW:"show"+Te,SHOWN:"shown"+Te,CLICK:"click"+Te,CLICK_DATA_API:"click"+Te+Se,KEYDOWN_DATA_API:"keydown"+Te+Se,KEYUP_DATA_API:"keyup"+Te+Se},Oe="disabled",Ne="show",ke="dropup",Le="dropright",xe="dropleft",Pe="dropdown-menu-right",He="position-static",je='[data-toggle="dropdown"]',Re=".dropdown form",Fe=".dropdown-menu",Me=".navbar-nav",We=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Ue="top-start",Be="top-end",qe="bottom-start",Ke="bottom-end",Qe="right-start",Ve="left-start",Ye={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},ze={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Xe=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)){var t=c._getParentFromElement(this._element),e=p(this._menu).hasClass(Ne);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=p.Event(Ae.SHOW,n);if(p(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof be)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t:m.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&p(t).addClass(He),this._popper=new be(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(t).closest(Me).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(Ne),p(t).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||p(this._element).hasClass(Oe)||p(this._menu).hasClass(Ne))){var t={relatedTarget:this._element},e=p.Event(Ae.SHOW,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(Oe)&&p(this._menu).hasClass(Ne)){var t={relatedTarget:this._element},e=p.Event(Ae.HIDE,t),n=c._getParentFromElement(this._element);p(n).trigger(e),e.isDefaultPrevented()||(p(this._menu).toggleClass(Ne),p(n).toggleClass(Ne).trigger(p.Event(Ae.HIDDEN,t)))}},t.dispose=function(){p.removeData(this._element,Ce),p(this._element).off(Te),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;p(this._element).on(Ae.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,p(this._element).data(),t),m.typeCheckConfig(we,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Fe))}return this._menu},t._getPlacement=function(){var t=p(this._element.parentNode),e=qe;return t.hasClass(ke)?(e=Ue,p(this._menu).hasClass(Pe)&&(e=Be)):t.hasClass(Le)?e=Qe:t.hasClass(xe)?e=Ve:p(this._menu).hasClass(Pe)&&(e=Ke),e},t._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),t},c._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(Ce);if(t||(t=new c(this,"object"==typeof e?e:null),p(this).data(Ce,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(je)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=p(e[n]).data(Ce),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(p(o).hasClass(Ne)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&p.contains(o,t.target))){var l=p.Event(Ae.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),e[n].setAttribute("aria-expanded","false"),p(a).removeClass(Ne),p(o).removeClass(Ne).trigger(p.Event(Ae.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=m.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||p(t.target).closest(Fe).length)):Ie.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!p(this).hasClass(Oe))){var e=c._getParentFromElement(this),n=p(e).hasClass(Ne);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(We));if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(je);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Ye}},{key:"DefaultType",get:function(){return ze}}]),c}();p(document).on(Ae.KEYDOWN_DATA_API,je,Xe._dataApiKeydownHandler).on(Ae.KEYDOWN_DATA_API,Fe,Xe._dataApiKeydownHandler).on(Ae.CLICK_DATA_API+" "+Ae.KEYUP_DATA_API,Xe._clearMenus).on(Ae.CLICK_DATA_API,je,function(t){t.preventDefault(),t.stopPropagation(),Xe._jQueryInterface.call(p(this),"toggle")}).on(Ae.CLICK_DATA_API,Re,function(t){t.stopPropagation()}),p.fn[we]=Xe._jQueryInterface,p.fn[we].Constructor=Xe,p.fn[we].noConflict=function(){return p.fn[we]=De,Xe._jQueryInterface};var Ge="modal",$e="bs.modal",Je="."+$e,Ze=p.fn[Ge],tn={backdrop:!0,keyboard:!0,focus:!0,show:!0},en={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},nn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,FOCUSIN:"focusin"+Je,RESIZE:"resize"+Je,CLICK_DISMISS:"click.dismiss"+Je,KEYDOWN_DISMISS:"keydown.dismiss"+Je,MOUSEUP_DISMISS:"mouseup.dismiss"+Je,MOUSEDOWN_DISMISS:"mousedown.dismiss"+Je,CLICK_DATA_API:"click"+Je+".data-api"},on="modal-dialog-scrollable",rn="modal-scrollbar-measure",sn="modal-backdrop",an="modal-open",ln="fade",cn="show",hn=".modal-dialog",un=".modal-body",fn='[data-toggle="modal"]',dn='[data-dismiss="modal"]',pn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",mn=".sticky-top",gn=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(hn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){p(this._element).hasClass(ln)&&(this._isTransitioning=!0);var n=p.Event(nn.SHOW,{relatedTarget:t});p(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p(this._element).on(nn.CLICK_DISMISS,dn,function(t){return e.hide(t)}),p(this._dialog).on(nn.MOUSEDOWN_DISMISS,function(){p(e._element).one(nn.MOUSEUP_DISMISS,function(t){p(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.Event(nn.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(ln);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(nn.FOCUSIN),p(this._element).removeClass(cn),p(this._element).off(nn.CLICK_DISMISS),p(this._dialog).off(nn.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return p(t).off(Je)}),p(document).off(nn.FOCUSIN),p.removeData(this._element,$e),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},tn,t),m.typeCheckConfig(Ge,t,en),t},t._showElement=function(t){var e=this,n=p(this._element).hasClass(ln);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),p(this._dialog).hasClass(on)?this._dialog.querySelector(un).scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(cn),this._config.focus&&this._enforceFocus();var i=p.Event(nn.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,p(e._element).trigger(i)};if(n){var r=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;p(document).off(nn.FOCUSIN).on(nn.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===p(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?p(this._element).on(nn.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||p(this._element).off(nn.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?p(window).on(nn.RESIZE,function(t){return e.handleUpdate(t)}):p(window).off(nn.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){p(document.body).removeClass(an),t._resetAdjustments(),t._resetScrollbar(),p(t._element).trigger(nn.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=p(this._element).hasClass(ln)?ln:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=sn,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(nn.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(cn),!t)return;if(!n)return void t();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(cn);var o=function(){e._removeBackdrop(),t&&t()};if(p(this._element).hasClass(ln)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(pn)),e=[].slice.call(document.querySelectorAll(mn));p(t).each(function(t,e){var n=e.style.paddingRight,i=p(e).css("padding-right");p(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(e).each(function(t,e){var n=e.style.marginRight,i=p(e).css("margin-right");p(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=p(document.body).css("padding-right");p(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}p(document.body).addClass(an)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(pn));p(t).each(function(t,e){var n=p(e).data("padding-right");p(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+mn));p(e).each(function(t,e){var n=p(e).data("margin-right");"undefined"!=typeof n&&p(e).css("margin-right",n).removeData("margin-right")});var n=p(document.body).data("padding-right");p(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=rn,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=p(this).data($e),e=l({},tn,p(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),p(this).data($e,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return tn}}]),o}();p(document).on(nn.CLICK_DATA_API,fn,function(t){var e,n=this,i=m.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=p(e).data($e)?"toggle":l({},p(e).data(),p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=p(e).one(nn.SHOW,function(t){t.isDefaultPrevented()||r.one(nn.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});gn._jQueryInterface.call(p(e),o,this)}),p.fn[Ge]=gn._jQueryInterface,p.fn[Ge].Constructor=gn,p.fn[Ge].noConflict=function(){return p.fn[Ge]=Ze,gn._jQueryInterface};var _n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},yn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,En=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function bn(t,s,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),a=Object.keys(s),l=[].slice.call(n.body.querySelectorAll("*")),i=function(t,e){var n=l[t],i=n.nodeName.toLowerCase();if(-1===a.indexOf(n.nodeName.toLowerCase()))return n.parentNode.removeChild(n),"continue";var o=[].slice.call(n.attributes),r=[].concat(s["*"]||[],s[i]||[]);o.forEach(function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===_n.indexOf(n)||Boolean(t.nodeValue.match(yn)||t.nodeValue.match(En));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,r)||n.removeAttribute(t.nodeName)})},o=0,r=l.length;o<r;o++)i(o);return n.body.innerHTML}var wn="tooltip",Cn="bs.tooltip",Tn="."+Cn,Sn=p.fn[wn],Dn="bs-tooltip",In=new RegExp("(^|\\s)"+Dn+"\\S+","g"),An=["sanitize","whiteList","sanitizeFn"],On={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object"},Nn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},kn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Hn);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(In);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Qn),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Qn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Gn}},{key:"NAME",get:function(){return Kn}},{key:"DATA_KEY",get:function(){return Qn}},{key:"Event",get:function(){return ni}},{key:"EVENT_KEY",get:function(){return Vn}},{key:"DefaultType",get:function(){return $n}}]),i}(qn);p.fn[Kn]=ii._jQueryInterface,p.fn[Kn].Constructor=ii,p.fn[Kn].noConflict=function(){return p.fn[Kn]=Yn,ii._jQueryInterface};var oi="scrollspy",ri="bs.scrollspy",si="."+ri,ai=p.fn[oi],li={offset:10,method:"auto",target:""},ci={offset:"number",method:"string",target:"(string|element)"},hi={ACTIVATE:"activate"+si,SCROLL:"scroll"+si,LOAD_DATA_API:"load"+si+".data-api"},ui="dropdown-item",fi="active",di='[data-spy="scroll"]',pi=".nav, .list-group",mi=".nav-link",gi=".nav-item",_i=".list-group-item",vi=".dropdown",yi=".dropdown-item",Ei=".dropdown-toggle",bi="offset",wi="position",Ci=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+mi+","+this._config.target+" "+_i+","+this._config.target+" "+yi,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(hi.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?bi:wi,o="auto"===this._config.method?t:this._config.method,r=o===wi?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=m.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[p(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){p.removeData(this._element,ri),p(this._scrollElement).off(si),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},li,"object"==typeof t&&t?t:{})).target){var e=p(t.target).attr("id");e||(e=m.getUID(oi),p(t.target).attr("id",e)),t.target="#"+e}return m.typeCheckConfig(oi,t,ci),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=p([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(ui)?(n.closest(vi).find(Ei).addClass(fi),n.addClass(fi)):(n.addClass(fi),n.parents(pi).prev(mi+", "+_i).addClass(fi),n.parents(pi).prev(gi).children(mi).addClass(fi)),p(this._scrollElement).trigger(hi.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(fi)}).forEach(function(t){return t.classList.remove(fi)})},n._jQueryInterface=function(e){return this.each(function(){var t=p(this).data(ri);if(t||(t=new n(this,"object"==typeof e&&e),p(this).data(ri,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return li}}]),n}();p(window).on(hi.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(di)),e=t.length;e--;){var n=p(t[e]);Ci._jQueryInterface.call(n,n.data())}}),p.fn[oi]=Ci._jQueryInterface,p.fn[oi].Constructor=Ci,p.fn[oi].noConflict=function(){return p.fn[oi]=ai,Ci._jQueryInterface};var Ti="bs.tab",Si="."+Ti,Di=p.fn.tab,Ii={HIDE:"hide"+Si,HIDDEN:"hidden"+Si,SHOW:"show"+Si,SHOWN:"shown"+Si,CLICK_DATA_API:"click"+Si+".data-api"},Ai="dropdown-menu",Oi="active",Ni="disabled",ki="fade",Li="show",xi=".dropdown",Pi=".nav, .list-group",Hi=".active",ji="> li > .active",Ri='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Fi=".dropdown-toggle",Mi="> .dropdown-menu .active",Wi=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(Oi)||p(this._element).hasClass(Ni))){var t,i,e=p(this._element).closest(Pi)[0],o=m.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?ji:Hi;i=(i=p.makeArray(p(e).find(r)))[i.length-1]}var s=p.Event(Ii.HIDE,{relatedTarget:this._element}),a=p.Event(Ii.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=p.Event(Ii.HIDDEN,{relatedTarget:n._element}),e=p.Event(Ii.SHOWN,{relatedTarget:i});p(i).trigger(t),p(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){p.removeData(this._element,Ti),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?p(e).children(Hi):p(e).find(ji))[0],r=n&&o&&p(o).hasClass(ki),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=m.getTransitionDurationFromElement(o);p(o).removeClass(Li).one(m.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){p(e).removeClass(Oi);var i=p(e.parentNode).find(Mi)[0];i&&p(i).removeClass(Oi),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(p(t).addClass(Oi),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),m.reflow(t),t.classList.contains(ki)&&t.classList.add(Li),t.parentNode&&p(t.parentNode).hasClass(Ai)){var o=p(t).closest(xi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Fi));p(r).addClass(Oi)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(Ti);if(e||(e=new i(this),t.data(Ti,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();p(document).on(Ii.CLICK_DATA_API,Ri,function(t){t.preventDefault(),Wi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Wi._jQueryInterface,p.fn.tab.Constructor=Wi,p.fn.tab.noConflict=function(){return p.fn.tab=Di,Wi._jQueryInterface};var Ui="toast",Bi="bs.toast",qi="."+Bi,Ki=p.fn[Ui],Qi={CLICK_DISMISS:"click.dismiss"+qi,HIDE:"hide"+qi,HIDDEN:"hidden"+qi,SHOW:"show"+qi,SHOWN:"shown"+qi},Vi="fade",Yi="hide",zi="show",Xi="showing",Gi={animation:"boolean",autohide:"boolean",delay:"number"},$i={animation:!0,autohide:!0,delay:500},Ji='[data-dismiss="toast"]',Zi=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this;p(this._element).trigger(Qi.SHOW),this._config.animation&&this._element.classList.add(Vi);var e=function(){t._element.classList.remove(Xi),t._element.classList.add(zi),p(t._element).trigger(Qi.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Yi),this._element.classList.add(Xi),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(zi)&&(p(this._element).trigger(Qi.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(zi)&&this._element.classList.remove(zi),p(this._element).off(Qi.CLICK_DISMISS),p.removeData(this._element,Bi),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},$i,p(this._element).data(),"object"==typeof t&&t?t:{}),m.typeCheckConfig(Ui,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;p(this._element).on(Qi.CLICK_DISMISS,Ji,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Yi),p(t._element).trigger(Qi.HIDDEN)};if(this._element.classList.remove(zi),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=p(this),e=t.data(Bi);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Bi,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"DefaultType",get:function(){return Gi}},{key:"Default",get:function(){return $i}}]),i}();p.fn[Ui]=Zi._jQueryInterface,p.fn[Ui].Constructor=Zi,p.fn[Ui].noConflict=function(){return p.fn[Ui]=Ki,Zi._jQueryInterface},function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=p.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=m,t.Alert=g,t.Button=k,t.Carousel=at,t.Collapse=Ct,t.Dropdown=Xe,t.Modal=gn,t.Popover=ii,t.Scrollspy=Ci,t.Tab=Wi,t.Toast=Zi,t.Tooltip=qn,Object.defineProperty(t,"__esModule",{value:!0})}); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/deps/bootstrap.min.css -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/deps/bootstrap.min.css
Changed
@@ -4,4 +4,3 @@ * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.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-lg-auto,.col-md,.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-md-auto,.col-sm,.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-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{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:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/colors.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/colors.less
Changed
@@ -106,6 +106,7 @@ @color-message: @color-font; @color-message-border: transparent; @color-message-background: fadeout(@color-main, 95%); +@color-message-text: #fff; @color-message-link: @color-main; @color-message-link-font-weight: normal; @color-message-information: @color-main; @@ -113,14 +114,19 @@ @color-message-warning: @color-warning; @color-message-error: @color-error; @color-message-loading: tint(@color-font, 30%); +@color-message-information-text: @color-message-text; +@color-message-success-text: @color-message-text; +@color-message-warning-text: @color-message; +@color-message-error-text: @color-message-text; +@color-message-loading-text: @color-message-text; @color-message-error-box: @color-message; @color-message-information-box: @color-message; @color-message-success-box: @color-message; @color-message-warning-box: @color-message; -@color-message-error-box-background: fadeout(@color-message-error, 85%); -@color-message-information-box-background: fadeout(@color-message-information, 85%); -@color-message-success-box-background: fadeout(@color-message-success, 85%); -@color-message-warning-box-background: fadeout(#ffff66, 75%); +@color-message-error-box-background: fadeout(@color-message-error, 80%); +@color-message-information-box-background: fadeout(@color-message-information, 80%); +@color-message-success-box-background: fadeout(@color-message-success, 80%); +@color-message-warning-box-background: fadeout(@color-message-warning, 80%); // Popovers (menus)
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/styles.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/styles.less
Changed
@@ -374,8 +374,8 @@ } #composestatusbar { - position: absolute; opacity: .3; + right: 2.5rem; @media screen and (min-width: (@screen-width-small + 1px)) { display: none; @@ -383,11 +383,10 @@ a.button { display: inline-block; - height: 2.5rem; - margin-right: .25rem; &:before { - line-height: 2.5rem; + line-height: @layout-touch-header-height; + font-size: 1.25rem !important; } } }
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/widgets/editor.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/widgets/editor.less
Changed
@@ -836,42 +836,63 @@ .html-editor { position: relative; - display: flex; - margin-bottom: .25rem; + margin-bottom: .2rem; - & > .nav { - border-color: transparent; - z-index: 1; + .editor-toolbar { position: absolute; - right: 1rem; - - a.active { - border-color: @color-input-border !important; + left: 1px; + top: 1px; + right: 1px; + border-radius: .25rem .25rem 0 0; + border-bottom: 1px solid @color-input-border; + background-color: @color-input-addon-background; - &.mode-html { - background-color: @color-input-addon-background; - border-bottom-color: @color-input-addon-background !important; - } + .mce-i-html { + display: block; + padding: 1px 5px; + margin: 2px; + width: 2rem; + height: 24px; + border: 1px solid transparent; + color: #595959; - &.mode-plain { - border-bottom-color: #fff !important; + &:focus, + &:hover { + text-decoration: none; + border-color: #e2e4e7; + background-color: #fff; } } + } - a:hover, - a:focus { - border-bottom-color: transparent; - outline: 0; - } + // hide toolbar in html mode and in mailvelope mode + &.mailvelope .editor-toolbar, + .mce-tinymce + textarea + .editor-toolbar { + display: none; + } + + .mce-i-html:before, + .mce-i-plaintext:before { + &:extend(.font-icon-class); + margin: 0; + width: 1em; + font-size: 1.2rem; + } + + .mce-i-html:before { + content: @fa-var-image; + line-height: 1.2em; + } + + .mce-i-plaintext:before { + content: @fa-var-window-close; //@fa-var-align-justify; } - & > iframe, // e.g. mailvelope frame & > .googie_edit_layer, - & > .mce-tinymce, & > textarea { - margin-top: 2.55rem; font-family: monospace; width: 100% !important; + padding-top: 2.5rem; } & > iframe { // e.g. mailvelope frame @@ -905,7 +926,7 @@ padding: .5rem .75rem; border: 1px solid @color-input-border; border-radius: .3rem; - line-height: 1.25; + line-height: 1.5; } .googie_link {
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/widgets/forms.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/widgets/forms.less
Changed
@@ -612,7 +612,7 @@ &:extend(.font-icon-class); margin: 0 !important; line-height: 1; - font-size: 1.1em; + font-size: 1.1rem; } &.user:before { content: @fa-var-user; @@ -623,7 +623,7 @@ &.host:before { content: @fa-var-home; } - &.language.before { + &.language:before { content: @fa-var-globe; } &.cancel:before { @@ -984,7 +984,6 @@ float: none; display: inline-block; width: 1em; - margin: 0; line-height: 1.5; } }
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/widgets/menu.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/widgets/menu.less
Changed
@@ -386,6 +386,8 @@ } a.toolbar-button { + cursor: pointer; + @media screen and (min-width: (@screen-width-large + 1px)) { line-height: 1.5; padding: .45rem;
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/styles/widgets/messages.less -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/styles/widgets/messages.less
Changed
@@ -193,7 +193,7 @@ div { background-color: @color-message; - color: #fff; + color: @color-message-text; @media screen and (max-width: @screen-width-xs) { margin: 0; @@ -211,7 +211,7 @@ } & > i.icon:before { - color: #fff; + color: @color-message-text; } &:last-child { @@ -221,22 +221,42 @@ .loading { background-color: @color-message-loading; + & when not(@color-message-loading-text = @color-message-text) { color: @color-message-loading-text; } + & > i.icon:before { + & when not(@color-message-loading-text = @color-message-text) { color: @color-message-loading-text; } + } } .alert-info.information { background-color: @color-message-information; + & when not(@color-message-information-text = @color-message-text) { color: @color-message-information-text; } + & > i.icon:before { + & when not(@color-message-information-text = @color-message-text) { color: @color-message-information-text; } + } } .alert-success { background-color: @color-message-success; + & when not(@color-message-success-text = @color-message-text) { color: @color-message-success-text; } + & > i.icon:before { + & when not(@color-message-success-text = @color-message-text) { color: @color-message-success-text; } + } } .alert-warning { background-color: @color-message-warning; + & when not(@color-message-warning-text = @color-message-text) { color: @color-message-warning-text; } + & > i.icon:before { + & when not(@color-message-warning-text = @color-message-text) { color: @color-message-warning-text; } + } } .alert-danger { background-color: @color-message-error; + & when not(@color-message-error-text = @color-message-text) { color: @color-message-error-text; } + & > i.icon:before { + & when not(@color-message-error-text = @color-message-text) { color: @color-message-error-text; } + } } a {
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/templates/compose.html -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/templates/compose.html
Changed
@@ -77,6 +77,7 @@ <div class="header"> <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <span class="header-title"><roundcube:label name="compose" /></span> + <div id="composestatusbar" class="position-absolute"></div> <!-- toolbar --> <div id="messagetoolbar" class="toolbar menu" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="options" href="#options" onclick="UI.show_sidebar()" data-hidden="big"> @@ -214,7 +215,6 @@ <div id="composebodycontainer"> <label for="composebody" class="voice"><roundcube:label name="arialabelmessagebody" /></label> <roundcube:object name="composeBody" id="composebody" form="form" cols="70" rows="20" class="form-control" tabindex="1" /> - <div id="composestatusbar"></div> </div> </form> <div class="formbuttons">
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/templates/mail.html -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/templates/mail.html
Changed
@@ -87,10 +87,8 @@ </div> <div id="messagelist-content" class="scroller" tabindex="-1"> <h2 id="aria-label-messagelist" class="voice"><roundcube:label name="arialabelmessagelist" /></h2> - <roundcube:object name="messages" id="messagelist" optionsmenuIcon="true" - class="listing messagelist sortheader fixedheader" - aria-labelledby="aria-label-messagelist" - data-list="message_list" data-label-msg="listempty" + <roundcube:object name="messages" id="messagelist" class="listing messagelist sortheader fixedheader" + aria-labelledby="aria-label-messagelist" data-list="message_list" data-label-msg="listempty" /> </div> <roundcube:include file="includes/pagenav.html" />
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/elastic/ui.js -> roundcubemail-1.4.1.27.tar.gz/skins/elastic/ui.js
Changed
@@ -119,7 +119,7 @@ // Intercept jQuery-UI dialogs... $.ui && $.widget('ui.dialog', $.ui.dialog, { open: function() { - // .. to unify min width for iframe'd dialogs + // ... to unify min width for iframe'd dialogs if ($(this.element).is('.iframe')) { this.options.width = Math.max(576, this.options.width); } @@ -152,20 +152,20 @@ } } else if (!is_framed) { - title = $('.boxtitle', layout.content).first().detach().text(); + title = layout.content.find('.boxtitle').first().detach().text(); if (!title) { title = $('h1.voice').first().text(); } if (title) { - $('.header > .header-title', layout.content).text(title); + layout.content.find('.header > .header-title').text(title); } } // Add content frame toolbar in the footer, for content buttons and navigation - if (!is_framed && layout.content.length && !$(layout.content).is('.no-navbar') - && !$(layout.content).children('.frame-content').length + if (!is_framed && layout.content.length && !layout.content.is('.no-navbar') + && !layout.content.children('.frame-content').length ) { env.frame_nav = $('<div class="footer menu toolbar content-frame-navigation hide-nav-buttons">') .append($('<a class="button prev">') @@ -492,7 +492,29 @@ (new MutationObserver(callback)).observe(document.body, {childList: true}); } - // Initialize column resizers + // Create floating action button(s) + if ((layout.list.length || layout.content.length) && is_mobile()) { + var fabuttons = []; + + $('[data-fab]').each(function() { + var button = $(this), + task = button.data('fab-task') || '*', + action = button.data('fab-action') || '*'; + + if ((task == '*' || task == rcmail.env.task) + && (action == '*' || action == rcmail.env.action || (action == 'none' && !rcmail.env.action)) + ) { + fabuttons.push(create_cloned_button(button, false, false, true)); + } + }); + + if (fabuttons.length) { + $('<div class="floating-action-buttons">').append(fabuttons) + .appendTo(layout.list.length ? layout.list : layout.content); + } + } + + // Initialize column resizers (must be after floating buttons) if (layout.sidebar.length) { splitter_init(layout.sidebar); } @@ -631,28 +653,6 @@ }); } - // Create floating action button(s) - if ((layout.list.length || layout.content.length) && is_mobile()) { - var fabuttons = []; - - $('[data-fab]').each(function() { - var button = $(this), - task = button.data('fab-task') || '*', - action = button.data('fab-action') || '*'; - - if ((task == '*' || task == rcmail.task) - && (action == '*' || action == rcmail.env.action || (action == 'none' && !rcmail.env.action)) - ) { - fabuttons.push(create_cloned_button(button, false, false, true)); - } - }); - - if (fabuttons.length) { - $('<div class="floating-action-buttons">').append(fabuttons) - .appendTo(layout.list.length ? layout.list : layout.content); - } - } - // Add menu link for each attachment if (rcmail.env.action != 'print') { $('#attachment-list > li').each(function() { @@ -683,7 +683,7 @@ if (rcmail.env.action == 'compose') { rcmail.addEventListener('compose-encrypted', function(e) { $("a.mode-html, button.attach").prop('disabled', e.active); - $('a.attach, a.responses')[e.active ? 'addClass' : 'removeClass']('disabled'); + $('a.attach, a.responses:not(.edit)')[e.active ? 'addClass' : 'removeClass']('disabled'); }); $('#layout-sidebar > .footer:not(.pagenav) > a.button').click(function() { @@ -703,8 +703,8 @@ } } - // In compose/preview window we do not provide "Back' button, instead - // we modify the Mail button in the task menu to act like it (i.e. calls 'list' command) + // In compose/preview window we do not provide "Back" button, instead + // we modify the "Mail" button in the task menu to act like it (i.e. calls 'list' command) if (!rcmail.env.extwin && (rcmail.env.action == 'compose' || rcmail.env.action == 'show')) { $('a.mail', layout.menu).attr('onclick', "return rcmail.command('list','',this,event)"); } @@ -737,6 +737,10 @@ if (rcmail.env.devel_mode && window.less) { less.pageLoadFinished.then(function() { resize(); + // Re-focus the focused input field on mail compose + if (rcmail.env.compose_focus_elem) { + $(rcmail.env.compose_focus_elem).focus(); + } }); } else { @@ -1177,7 +1181,7 @@ title = $('h1.voice').text() || $('title').text() || ''; } - $('.header > .header-title', layout.content).text(title); + layout.content.find('.header > .header-title').text(title); }; // display or reset the content frame @@ -1346,6 +1350,9 @@ */ function tinymce_init(o) { + var onload = [], + is_editor = $('#' + o.id).is('[data-html-editor]'); + // Enable autoresize plugin o.config.plugins += ' autoresize'; @@ -1370,9 +1377,9 @@ }; // Shift+Tab on mail compose editor scrolls the page to the top - o.config.setup_callback = function(ed) { + onload.push(function(ed) { ed.on('keypress', keypress); - }; + }); $('#composebody').on('keypress', keypress); @@ -1393,6 +1400,26 @@ $(window).resize(function() { form.trigger('scroll'); }); } + + if (is_editor) { + o.config.toolbar = 'plaintext | ' + o.config.toolbar; + // Use setup_callback, we can't use editor-load event + o.config.setup_callback = function(ed) { + ed.addButton('plaintext', { + tooltip: rcmail.gettext('plaintoggle'), + icon: 'plaintext', + onclick: function(e) { + if (rcmail.command('toggle-editor', {id: ed.id, html: false}, '', e.originalEvent)) { + $('#' + ed.id).parent().removeClass('ishtml'); + } + } + }); + }; + } + + rcmail.addEventListener('editor-load', function(e) { + $.each(onload, function() { this(e.ref.editor); }); + }); }; function datepicker_init(datepicker) @@ -1517,14 +1544,14 @@ case 'reply-list': if (rcmail.env.reply_all_mode == 1) { var label = rcmail.gettext(args.status ? 'replylist' : 'replyall'); - $('a.button.reply-all').attr('title', label).find('.inner').text(label); + $('.toolbar a.reply-all').attr('title', label).find('.inner').text(label); } break; case 'compose-encrypted': // show the toolbar button for Mailvelope if (args.status) { - $('a.button.encrypt:not(.icon)').parent().show(); + $('.toolbar a.encrypt').parent().show(); } break; @@ -1661,7 +1688,7 @@ var title, right = 0, left = 0, padding = 0, sizes = {left: 0, right: 0}; - $(this).children(':visible').each(function() { + $(this).children(':visible:not(.position-absolute)').each(function() { if (!title && $(this).is('.header-title')) { title = $(this); return; @@ -2055,8 +2082,8 @@ rcmail.addEventListener('init', update_func) .addEventListener('responsebeforesearch', update_func) - // close options form on list/search request .addEventListener('beforelist', close_func) + .addEventListener('afterlist', update_func) .addEventListener('beforesearch', close_func); }; @@ -2092,37 +2119,33 @@ }; // convert content toolbar to a popup list - if (layout.content) { - $('.header > .menu', layout.content).each(function() { - var toolbar = $(this); + layout.content.find('.header > .menu').each(function() { + var toolbar = $(this); - toolbar.children().each(function() { button_func(this, items); }); - toolbar.remove(); - }); - } + toolbar.children().each(function() { button_func(this, items); }); + toolbar.remove(); + }); // convert list toolbar to a popup list - if (layout.list) { - $('.header > .menu', layout.list).each(function() { - var toolbar = $(this); - - list_mark = toolbar.next(); + layout.list.find('.header > .menu').each(function() { + var toolbar = $(this); - toolbar.children().each(function() { - if (meta.mode != 'large') { - // TODO: Would be better to set this automatically on submenu display - // i.e. in show/shown event (see popup_init()), if possible - $(this).data('popup-pos', 'right'); - } + list_mark = toolbar.next(); - // add items to the content menu too - button_func(this, items, true); - button_func(this, list_items); - }); + toolbar.children().each(function() { + if (meta.mode != 'large') { + // TODO: Would be better to set this automatically on submenu display + // i.e. in show/shown event (see popup_init()), if possible + $(this).data('popup-pos', 'right'); + } - toolbar.remove(); + // add items to the content menu too + button_func(this, items, true); + button_func(this, list_items); }); - } + + toolbar.remove(); + }); // special elements to clone and add to the toolbar (mobile only) $('ul[data-menu="toolbar-small"] > li > a').each(function() { @@ -2165,13 +2188,11 @@ .append($('<ul>').attr(menu_attrs).data('popup-parent', container).append(items)) .append(menu_button); - if (layout.list.length) { - // bind toolbar menu with the menu button in the list header - $('a.toolbar-menu-button', layout.list).click(function(e) { - e.stopPropagation(); - menu_button.click(); - }); - } + // bind toolbar menu with the menu button in the list header + layout.list.find('a.toolbar-menu-button').click(function(e) { + e.stopPropagation(); + menu_button.click(); + }); } }; @@ -2352,7 +2373,7 @@ // the DOM (https://github.com/twbs/bootstrap/issues/20219) // making our menus to not update buttons state. // Work around this by attaching it back to the DOM tree. - popup.appendTo(popup.data('popup-parent') || document.body); + .appendTo(popup.data('popup-parent') || document.body); } // close orphaned popovers, for some reason there are sometimes such dummy elements left @@ -3091,7 +3112,7 @@ */ function recipient_input(obj) { - var list, input, ac_props, + var list, input, input_len_update = function() { input.css('width', Math.max(40, input.val().length * 15 + 25)); }, @@ -3125,6 +3146,8 @@ replace.replaceWith(recipient); else recipient.insertBefore(input.parent()); + + apply_func(); }, update_func = function(text) { var result; @@ -3182,7 +3205,7 @@ .on('blur', function() { list.removeClass('focus'); }) .on('focus mousedown', function() { list.addClass('focus'); }); - list = $('<ul>').addClass('form-control recipient-input ac-input') + list = $('<ul>').addClass('form-control recipient-input ac-input rounded-left') .append($('<li>').append(input)) .on('click', function() { input.focus(); }); @@ -3196,27 +3219,16 @@ // some core code sometimes focuses or changes the original node // in such cases we wan't to parse it's value and apply changes // to the widget element - .on('focus', function(e) { input.focus(); }) - .on('change', function(e) { + .on('focus', function(e) { input.focus(); e.preventDefault(); }) + .on('change', function() { $('li.recipient', list).remove(); input.val(this.value).change(); }) // copy and parse the value already set .change(); - // this one line is here to fix border of Bootstrap's input-group, - // input-group should not contain any hidden elements - $(obj).detach().insertBefore(list.parent()); - - if (rcmail.env.autocomplete_threads > 0) { - ac_props = { - threads: rcmail.env.autocomplete_threads, - sources: rcmail.env.autocomplete_sources - }; - } - // Init autocompletion - rcmail.init_address_input_events(input, ac_props); + rcmail.init_address_input_events(input); }; /** @@ -3613,21 +3625,20 @@ var sw, is_table = false, editor = $(obj), parent = editor.parent(), - tabindex = editor.attr('tabindex'), - mode = function() { - if (is_table) { - return sw.is(':checked') ? 'html' : 'plain'; - } - - return sw.val(); - }, - tabs = $('<ul class="nav nav-tabs">') - .append($('<li class="nav-item">') - .append($('<a class="nav-link mode-html" href="#">') - .text(rcmail.gettext('htmltoggle')))) - .append($('<li class="nav-item">') - .append($('<a class="nav-link mode-plain" href="#">') - .text(rcmail.gettext('plaintoggle')))); + plain_btn = $('<a class="mce-i-html" href="#" tabindex="-1"></a>') + .attr('title', rcmail.gettext('htmltoggle')) + .on('click', function(e) { + if (rcmail.command('toggle-editor', {id: editor.attr('id'), html: true}, '', e.originalEvent)) { + parent.addClass('ishtml'); + } + }) + .on('keydown', function(e) { + if (e.which == 9) { // TAB + editor.focus(); + return false; + } + }), + toolbar = $('<div class="editor-toolbar">').append(plain_btn); if (parent.is('td')) { sw = $('input[type="checkbox"]', parent.parent().next()); @@ -3643,23 +3654,14 @@ } parent.addClass('html-editor'); - editor.before(tabs); - $('a', tabs).attr('tabindex', tabindex) - .on('click', function(e) { - var id = editor.attr('id'), is_html = $(this).is('.mode-html'); - - e.preventDefault(); - if (rcmail.command('toggle-editor', {id: id, html: is_html}, '', e.originalEvent)) { - $(this).tab('show').prop('tabindex', -1); - $('.mode-' + (is_html ? 'plain' : 'html'), tabs).prop('tabindex', tabindex); - - if (is_table) { - sw.prop('checked', is_html); - } + editor.after(toolbar).data('control', sw) + .on('keydown', function(e) { + // ALT + F10 is the way to access toolbar in TinyMCE, let's do the same for plain editor + if (e.altKey && e.which == 121) { + plain_btn.focus(); } - }) - .filter('.mode-' + mode()).tab('show').prop('tabindex', -1); + }); if (is_table) { // Hide unwanted table cells @@ -3884,7 +3886,10 @@ */ function splitter_init(node) { - var key = rcmail.env.task + rcmail.env.action + '.' + node.attr('id'), + // Use id of the list element, if exists, as a part of the key, instead of action.column-id + // This way e.g. the sidebar in Settings is always the same width for all Settings' pages + var list_id = node.find('.scroller .listing').first().attr('id'), + key = rcmail.env.task + '.' + (list_id || (rcmail.env.action + '.' + node.attr('id'))), pos = get_pref(key), reverted = node.is('.sidebar-right'), set_width = function(width) {
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/includes/footer.html -> roundcubemail-1.4.1.27.tar.gz/skins/larry/includes/footer.html
Changed
@@ -1,5 +1,5 @@ <roundcube:object name="message" id="messagestack" condition="env:task != 'login'" /> -<script type="text/javascript"> +<script> if (!window.UI) { var UI = new rcube_mail_ui(); } </script>
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/includes/header.html -> roundcubemail-1.4.1.27.tar.gz/skins/larry/includes/header.html
Changed
@@ -1,4 +1,4 @@ -<script type="text/javascript"> +<script> var UI = new rcube_mail_ui(); </script>
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/includes/links.html -> roundcubemail-1.4.1.27.tar.gz/skins/larry/includes/links.html
Changed
@@ -5,7 +5,7 @@ <roundcube:if condition="in_array(env:task, array('mail','addressbook','settings'))" /> <link rel="stylesheet" type="text/css" href="/<roundcube:var name="env:task" />.css" /> <roundcube:endif /> -<script type="text/javascript" src="/ui.js"></script> +<script src="/ui.js"></script> <roundcube:add_label name="errortitle" /> <roundcube:add_label name="toggleadvancedoptions" /> <roundcube:add_label name="options" />
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/mail.css -> roundcubemail-1.4.1.27.tar.gz/skins/larry/mail.css
Changed
@@ -1347,7 +1347,6 @@ #composebodycontainer .mce-panel { border-color: #ddd !important; - background: #f0f0f0; } #composebody_toolbargroup {
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/styles.css -> roundcubemail-1.4.1.27.tar.gz/skins/larry/styles.css
Changed
@@ -3103,6 +3103,15 @@ z-index: 65537 !important; } +.mce-tinymce.mce-container { + box-shadow: none; +} + +.mce-toolbar.mce-container { + background: #f0f0f0; +} + + /** PGP Key import dialog **/ .pgpkeyimport div.key { position: relative;
View file
roundcubemail-1.4-rc2.12.tar.gz/skins/larry/ui.js -> roundcubemail-1.4.1.27.tar.gz/skins/larry/ui.js
Changed
@@ -183,9 +183,7 @@ else if (rcmail.env.action == 'compose') { rcmail.addEventListener('fileappended', function(e) { if (e.attachment.complete) attachmentmenu_append(e.item); }) .addEventListener('aftertoggle-editor', function(e) { - window.setTimeout(function() { layout_composeview() }, 200); - if (e && e.mode) - $("select[name='editorSelector']").val(e.mode); + window.setTimeout(function() { layout_composeview(); }, 200); }) .addEventListener('compose-encrypted', function(e) { $("select[name='editorSelector']").prop('disabled', e.active);
View file
roundcubemail-1.4-rc2.12.tar.gz/tests/Framework/Bootstrap.php -> roundcubemail-1.4.1.27.tar.gz/tests/Framework/Bootstrap.php
Changed
@@ -17,11 +17,11 @@ $needle = 'test'; $result = in_array_nocase($needle, $haystack); - $this->assertTrue($result, $title); + $this->assertTrue($result, "Invalid in_array_nocase() result (Array)"); $result = in_array_nocase($needle, null); - $this->assertFalse($result, $title); + $this->assertFalse($result, "Invalid in_array_nocase() result (null)"); } /**
View file
roundcubemail-1.4-rc2.12.tar.gz/tests/Framework/Browser.php -> roundcubemail-1.4.1.27.tar.gz/tests/Framework/Browser.php
Changed
@@ -21,7 +21,7 @@ /** * @dataProvider browsers */ - function test_browser($useragent, $opera, $chrome, $ie, $edge, $ns, $safari, $mz) + function test_browser($useragent, $opera, $chrome, $ie, $edge, $safari, $mz) { $object = $this->getBrowser($useragent); @@ -63,7 +63,7 @@ function browsers() { - return $this->extractDataSet(array('isOpera', 'isChrome', 'isIE', 'isEdge', 'isNS', 'isSafari', 'isMZ')); + return $this->extractDataSet(array('isOpera', 'isChrome', 'isIE', 'isEdge', 'isSafari', 'isMZ')); } function useragents()
View file
roundcubemail-1.4-rc2.12.tar.gz/tests/Framework/DB.php -> roundcubemail-1.4.1.27.tar.gz/tests/Framework/DB.php
Changed
@@ -34,19 +34,28 @@ "-- test comment", "ALTER TABLE `xxx` CHANGE test test int;", "TRUNCATE xxx;", + "TRUNCATE TABLE xxx;", "DROP TABLE `vvv`;", "CREATE TABLE `i` (test int CONSTRAINT `iii` FOREIGN KEY (`test`) REFERENCES `xxx`(`test`) ON DELETE CASCADE ON UPDATE CASCADE);", + "CREATE TABLE `i` (`test` int, INDEX `testidx` (`test`))", + "CREATE TABLE `i` (`test` int, UNIQUE `testidx` (`test`))", + "CREATE TABLE `i` (`test` int, UNIQUE INDEX `testidx` (`test`))", "INSERT INTO xxx test = 1;", "SELECT test FROM xxx;", )); + $output = implode("\n", array( "CREATE TABLE `prefix_xxx` (test int, INDEX prefix_xxx (test))", "ALTER TABLE `prefix_xxx` CHANGE test test int", "TRUNCATE prefix_xxx", + "TRUNCATE TABLE prefix_xxx", "DROP TABLE `prefix_vvv`", "CREATE TABLE `prefix_i` (test int CONSTRAINT `prefix_iii` FOREIGN KEY (`test`) REFERENCES `prefix_xxx`(`test`) ON DELETE CASCADE ON UPDATE CASCADE)", + "CREATE TABLE `prefix_i` (`test` int, INDEX `prefix_testidx` (`test`))", + "CREATE TABLE `prefix_i` (`test` int, UNIQUE `prefix_testidx` (`test`))", + "CREATE TABLE `prefix_i` (`test` int, UNIQUE INDEX `prefix_testidx` (`test`))", "INSERT INTO prefix_xxx test = 1", "SELECT test FROM prefix_xxx", ));
View file
roundcubemail-1.4.1.27.tar.gz/tests/Rcmail/OutputHtml.php
Added
@@ -0,0 +1,147 @@ +<?php +/** + * Test class to test rcmail_output_html class + * + * @package Tests + */ +class Rcmail_OutputHtml extends PHPUnit_Framework_TestCase +{ + /** + * Test get_template_logo() + */ + function test_logo() + { + $rcmail = rcube::get_instance(); + $output = new rcmail_output_html(); + $reflection = new ReflectionClass('rcmail_output_html'); + $set_skin = $reflection->getProperty('skin_name'); + $set_template = $reflection->getProperty('template_name'); + $get_template_logo = $reflection->getMethod('get_template_logo'); + + $set_skin->setAccessible(true); + $set_template->setAccessible(true); + $get_template_logo->setAccessible(true); + + $set_skin->setValue($output, 'elastic'); + + $rcmail->config->set('skin_logo', 'img00'); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img00', $result); + + $set_template->setValue($output, 'mail'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img00', $result); + + $rcmail->config->set('skin_logo', array( + "elastic:login[small]" => "img01", + "elastic:login" => "img02", + "elastic:*[small]" => "img03", + "larry:*" => "img04", + "*:login[small]" => "img05", + "*:login" => "img06", + "*[print]" => "img07", + "*" => "img08", + )); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img01', $result); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img02', $result); + + $set_template->setValue($output, 'mail'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img03', $result); + + $set_template->setValue($output, 'mail'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img08', $result); + + $set_template->setValue($output, 'mail'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img03', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img08', $result); + + $set_skin->setValue($output, 'larry'); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img05', $result); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img04', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img04', $result); + + $set_skin->setValue($output, '_test_'); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img05', $result); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img06', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array('print')); + $this->assertSame('img07', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img08', $result); + + $rcmail->config->set('skin_logo', array( + "elastic:login[small]" => "img09", + "elastic:login" => "img10", + "larry:*" => "img11", + "elastic[small]" => "img12", + "login[small]" => "img13", + "login" => "img14", + "[print]" => "img15", + "*" => "img16", + )); + + $set_skin->setValue($output, 'elastic'); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img09', $result); + + $set_template->setValue($output, 'mail'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame(null, $result); + + $set_skin->setValue($output, '_test_'); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array('small')); + $this->assertSame('img13', $result); + + $set_template->setValue($output, 'login'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img14', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array('print')); + $this->assertSame('img15', $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array('_test_')); + $this->assertSame(null, $result); + + $set_template->setValue($output, '_test_'); + $result = $get_template_logo->invokeArgs($output, array()); + $this->assertSame('img16', $result); + } +}
View file
roundcubemail-1.4-rc2.12.tar.gz/tests/phpunit.xml -> roundcubemail-1.4.1.27.tar.gz/tests/phpunit.xml
Changed
@@ -51,12 +51,14 @@ <file>Framework/VCard.php</file> <file>Framework/Washtml.php</file> <file>MailFunc.php</file> + <file>Rcmail/OutputHtml.php</file> <file>Rcmail/Rcmail.php</file> </testsuite> <testsuite name="Plugins Tests"> <file>./../plugins/acl/tests/Acl.php</file> <file>./../plugins/additional_message_headers/tests/AdditionalMessageHeaders.php</file> <file>./../plugins/archive/tests/Archive.php</file> + <file>./../plugins/attachment_reminder/tests/AttachmentReminder.php</file> <file>./../plugins/autologon/tests/Autologon.php</file> <file>./../plugins/database_attachments/tests/DatabaseAttachments.php</file> <file>./../plugins/debug_logger/tests/DebugLogger.php</file>
View file
roundcubemail.dsc
Changed
@@ -2,7 +2,7 @@ Source: roundcubemail Binary: roundcubemail Architecture: all -Version: 1:1.4-0~kolab316 +Version: 1:1.4.1.27-0~kolab1 Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Uploaders: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Homepage: http://www.roundcube.net/ @@ -14,5 +14,5 @@ roundcubemail deb web extra roundcubemail-core deb web extra Files: - 00000000000000000000000000000000 0 roundcubemail-1.4-rc2.12.tar.gz + 00000000000000000000000000000000 0 roundcubemail-1.4.1.27.tar.gz 00000000000000000000000000000000 0 debian.tar.gz
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.