diff --git a/.gitignore b/.gitignore index f9394a280..06e0ca5f7 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,4 @@ New client/chameleon-client/* *.jfr .DS_Store # *.iml +chameleon-server/build diff --git a/chameleon-server/build.gradle b/chameleon-server/build.gradle new file mode 100644 index 000000000..3400252d8 --- /dev/null +++ b/chameleon-server/build.gradle @@ -0,0 +1,86 @@ +plugins { + id 'java' + id 'com.github.johnrengelman.shadow' version '5.2.0' +} + +shadowJar { + baseName = 'shadow' + configurations = [project.configurations.compile] + classifier = '' + archiveVersion = '' +} + +group 'com.chameleonvision' +version '1.0-SNAPSHOT' + +sourceCompatibility = 11 + +repositories { + mavenCentral() + maven { + url = 'https://frcmaven.wpi.edu:443/artifactory/release' + } +} +ext { + wpilibVersion = '2020.2.2' + openCVVersion = '3.4.7-2' +} + +dependencies { + implementation "io.javalin:javalin:3.7.0" + + implementation "com.fasterxml.jackson.core:jackson-annotations:2.10.0" + implementation "com.fasterxml.jackson.core:jackson-core:2.10.0" + implementation "com.fasterxml.jackson.core:jackson-databind:2.10.0" + + implementation "org.msgpack:msgpack-core:0.8.20" + implementation "org.msgpack:jackson-dataformat-msgpack:0.8.20" + + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.9' + implementation "org.apache.commons:commons-math3:3.6.1" + implementation group: 'commons-io', name: 'commons-io', version: '2.6' + implementation "org.apache.commons:commons-collections4:4.4" + implementation "org.apache.commons:commons-exec:1.3" + + implementation "com.moandjiezana.toml:toml4j:0.7.2" + + // javacv + compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5.2' + + // wpilib stuff + implementation "edu.wpi.first.wpiutil:wpiutil-java:$wpilibVersion" + implementation "edu.wpi.first.cameraserver:cameraserver-java:$wpilibVersion" + + implementation "edu.wpi.first.cscore:cscore-java:$wpilibVersion" + compile "edu.wpi.first.cscore:cscore-jni:$wpilibVersion:linuxaarch64bionic" + compile "edu.wpi.first.cscore:cscore-jni:$wpilibVersion:linuxraspbian" + compile "edu.wpi.first.cscore:cscore-jni:$wpilibVersion:linuxx86-64" + compile "edu.wpi.first.cscore:cscore-jni:$wpilibVersion:osxx86-64" + compile "edu.wpi.first.cscore:cscore-jni:$wpilibVersion:windowsx86-64" + + implementation "edu.wpi.first.ntcore:ntcore-java:$wpilibVersion" + compile "edu.wpi.first.ntcore:ntcore-jni:$wpilibVersion:linuxaarch64bionic" + compile "edu.wpi.first.ntcore:ntcore-jni:$wpilibVersion:linuxraspbian" + compile "edu.wpi.first.ntcore:ntcore-jni:$wpilibVersion:linuxx86-64" + compile "edu.wpi.first.ntcore:ntcore-jni:$wpilibVersion:osxx86-64" + compile "edu.wpi.first.ntcore:ntcore-jni:$wpilibVersion:windowsx86-64" + + implementation "edu.wpi.first.thirdparty.frc2020.opencv:opencv-java:$openCVVersion" + compile "edu.wpi.first.thirdparty.frc2020.opencv:opencv-jni:$openCVVersion:linuxaarch64bionic" + compile "edu.wpi.first.thirdparty.frc2020.opencv:opencv-jni:$openCVVersion:linuxraspbian" + compile "edu.wpi.first.thirdparty.frc2020.opencv:opencv-jni:$openCVVersion:linuxx86-64" + compile "edu.wpi.first.thirdparty.frc2020.opencv:opencv-jni:$openCVVersion:osxx86-64" + compile "edu.wpi.first.thirdparty.frc2020.opencv:opencv-jni:$openCVVersion:windowsx86-64" + + // test stuff + testImplementation('org.junit.jupiter:junit-jupiter:5.6.0') +} + +test { + test { + useJUnitPlatform() + testLogging { + events "passed", "skipped", "failed" + } + } +} \ No newline at end of file diff --git a/chameleon-server/chameleon-vision.iml b/chameleon-server/chameleon-vision.iml deleted file mode 100644 index 41084fba0..000000000 --- a/chameleon-server/chameleon-vision.iml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/chameleon-server/gradle/wrapper/gradle-wrapper.properties b/chameleon-server/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..9ae0a13b0 --- /dev/null +++ b/chameleon-server/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Feb 20 23:05:11 EST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/chameleon-server/gradlew b/chameleon-server/gradlew new file mode 100644 index 000000000..af6708ff2 --- /dev/null +++ b/chameleon-server/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/chameleon-server/gradlew.bat b/chameleon-server/gradlew.bat new file mode 100644 index 000000000..6d57edc70 --- /dev/null +++ b/chameleon-server/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/chameleon-server/pom.xml b/chameleon-server/pom.xml deleted file mode 100644 index 94b7b4e83..000000000 --- a/chameleon-server/pom.xml +++ /dev/null @@ -1,269 +0,0 @@ - - - 4.0.0 - org.chameleon-vision.main - chameleon-vision - - 2.3.2 - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 - - 12 - 12 - true - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - package - - shade - - - - - com.chameleonvision.Main - - - - - - - - - - UTF-8 - 2020.2.2 - 3.4.7-2 - - - 12 - - - - WPI - WPILib Artifactory Server-releases - https://frcmaven.wpi.edu:443/artifactory/release - - - - - - io.javalin - javalin - RELEASE - - - - - org.json - json - 20190722 - - - - - org.slf4j - slf4j-nop - 1.7.26 - - - - - org.apache.commons - commons-math3 - 3.6.1 - - - commons-io - commons-io - RELEASE - - - org.msgpack - msgpack-core - 0.8.18 - - - org.msgpack - jackson-dataformat-msgpack - 0.8.18 - - - org.apache.commons - commons-lang3 - 3.9 - - - - com.fasterxml.jackson.core - jackson-core - 2.10.1 - - - - com.fasterxml.jackson.core - jackson-annotations - 2.10.1 - - - - com.fasterxml.jackson.core - jackson-databind - 2.10.1 - - - - org.junit.jupiter - junit-jupiter-engine - 5.5.2 - - - - - - edu.wpi.first.cscore - cscore-java - ${wpilib.version} - - - - edu.wpi.first.cscore - cscore-jni - ${wpilib.version} - linuxaarch64bionic - - - edu.wpi.first.cscore - cscore-jni - ${wpilib.version} - linuxraspbian - - - edu.wpi.first.cscore - cscore-jni - ${wpilib.version} - linuxx86-64 - - - edu.wpi.first.cscore - cscore-jni - ${wpilib.version} - osxx86-64 - - - edu.wpi.first.cscore - cscore-jni - ${wpilib.version} - windowsx86-64 - - - - - edu.wpi.first.cameraserver - cameraserver-java - ${wpilib.version} - - - - - edu.wpi.first.ntcore - ntcore-java - ${wpilib.version} - - - - - edu.wpi.first.ntcore - ntcore-jni - ${wpilib.version} - osxx86-64 - - - edu.wpi.first.ntcore - ntcore-jni - ${wpilib.version} - linuxraspbian - - - edu.wpi.first.ntcore - ntcore-jni - ${wpilib.version} - linuxx86-64 - - - edu.wpi.first.ntcore - ntcore-jni - ${wpilib.version} - linuxaarch64bionic - - - edu.wpi.first.ntcore - ntcore-jni - ${wpilib.version} - windowsx86-64 - - - - - edu.wpi.first.wpiutil - wpiutil-java - ${wpilib.version} - - - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-java - ${opencv.version} - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-jni - ${opencv.version} - linuxaarch64bionic - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-jni - ${opencv.version} - linuxraspbian - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-jni - ${opencv.version} - linuxx86-64 - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-jni - ${opencv.version} - osxx86-64 - - - edu.wpi.first.thirdparty.frc2020.opencv - opencv-jni - ${opencv.version} - windowsx86-64 - - - diff --git a/chameleon-server/settings.gradle b/chameleon-server/settings.gradle new file mode 100644 index 000000000..c1d0ca741 --- /dev/null +++ b/chameleon-server/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'ChameleonVision' + diff --git a/chameleon-server/src/main/java/com/chameleonvision/Debug.java b/chameleon-server/src/main/java/com/chameleonvision/Debug.java deleted file mode 100644 index b90b7d75f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/Debug.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.chameleonvision; - -public class Debug { - private Debug() {} - - private static boolean isTestMode() { - return Main.testMode; - } - - public static void printInfo(String infoMessage) { - if (isTestMode()) { - System.out.println(infoMessage); - } - } - - public static void printInfo(String smallInfo, String largeInfo) { - System.out.println(isTestMode() ? String.format("%s - %s" , smallInfo, largeInfo) : smallInfo); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/Exceptions/DuplicatedKeyException.java b/chameleon-server/src/main/java/com/chameleonvision/Exceptions/DuplicatedKeyException.java deleted file mode 100644 index dc54ae95a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/Exceptions/DuplicatedKeyException.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.chameleonvision.Exceptions; - -public class DuplicatedKeyException extends Exception{ - public DuplicatedKeyException(String message){ - super(message); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/Main.java b/chameleon-server/src/main/java/com/chameleonvision/Main.java deleted file mode 100644 index 08d68a714..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/Main.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.chameleonvision; - -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.network.NetworkManager; -import com.chameleonvision.networktables.NetworkTablesManager; -import com.chameleonvision.scripting.ScriptEventType; -import com.chameleonvision.scripting.ScriptManager; -import com.chameleonvision.util.Platform; -import com.chameleonvision.util.Utilities; -import com.chameleonvision.vision.VisionManager; -import com.chameleonvision.web.Server; -import edu.wpi.cscore.CameraServerCvJNI; -import edu.wpi.cscore.CameraServerJNI; - -import java.io.IOException; - -import static com.chameleonvision.util.Platform.CurrentPlatform; - -public class Main { - - private static final String NT_SERVERMODE_KEY = "--nt-servermode"; // no args for this setting - private static final String NT_CLIENTMODESERVER_KEY = "--nt-client-server"; // expects String representing an IP address (hostnames will be rejected!) - private static final String NETWORK_MANAGE_KEY = "--unmanage-network"; // no args for this setting - private static final String IGNORE_ROOT_KEY = "--ignore-root"; // no args for this setting - private static final String TEST_MODE_KEY = "--cv-development"; - private static final String UI_PORT_KEY = "--ui-port"; - - private static final int DEFAULT_PORT = 5800; - - private static boolean ntServerMode = false; - private static boolean manageNetwork = true; - private static boolean ignoreRoot = false; - private static String ntClientModeServer = null; - public static boolean testMode = false; - public static int uiPort = DEFAULT_PORT; - - private static void handleArgs(String[] args) { - for (int i = 0; i < args.length; i++) { - var key = args[i].toLowerCase(); - String value = null; - - // this switch handles arguments with a value. Add any settings with a value here. - switch (key) { - case NT_CLIENTMODESERVER_KEY: - var potentialValue = args[i + 1]; - // ensures this "value" isnt null, blank, nor another argument - if (potentialValue != null && !potentialValue.isBlank() && !potentialValue.startsWith("-") & !potentialValue.startsWith("--")) { - value = potentialValue.toLowerCase(); - } - i++; // increment to skip an 'arg' next go-around of for loop, as that would be this value - break; - case UI_PORT_KEY: - var potentialPort = args[i + 1]; - if (potentialPort != null && !potentialPort.isBlank() && !potentialPort.startsWith("-") & !potentialPort.startsWith("--")) { - value = potentialPort; - } - i++; - break; - case NT_SERVERMODE_KEY: - case NETWORK_MANAGE_KEY: - case IGNORE_ROOT_KEY: - case TEST_MODE_KEY: - // nothing - break; - } - - // this switch actually handles the arguments. - switch (key) { - case NT_SERVERMODE_KEY: - ntServerMode = true; - break; - case NT_CLIENTMODESERVER_KEY: - if (value != null) { - if (value.equals("localhost")) { - ntClientModeServer = "127.0.0.1"; - continue; - } - - if (Utilities.isValidIPV4(value)) { - ntClientModeServer = value; - continue; - } - } - System.err.println("Argument for NT Server Host was invalid, defaulting to team number host"); - break; - case NETWORK_MANAGE_KEY: - manageNetwork = false; - break; - case IGNORE_ROOT_KEY: - ignoreRoot = true; - break; - case TEST_MODE_KEY: - testMode = true; - break; - case UI_PORT_KEY: - if (value != null) { - try { - uiPort = Integer.parseInt(value); - } catch (NumberFormatException e){ - System.err.println("ui Port was not a valid number using port 5800"); - } - } - break; - } - } - } - - public static void main(String[] args) { - - Runtime.getRuntime().addShutdownHook(new Thread(() -> ScriptManager.queueEvent(ScriptEventType.kProgramExit))); - - if (CurrentPlatform.equals(Platform.UNSUPPORTED)) { - System.err.printf("Sorry, this platform is not supported. Give these details to the developers.\n%s\n", CurrentPlatform.toString()); - return; - } else { - System.out.printf("Starting Chameleon Vision on platform %s\n", CurrentPlatform.toString()); - } - - handleArgs(args); - - if (!CurrentPlatform.isRoot()) { - if (ignoreRoot) { - // manageNetwork = false; - System.out.println("Ignoring root, network will not be managed!"); - } else { - System.err.println("This program must be run as root!"); - return; - } - } - - // Attempt to load the JNI Libraries - System.out.println("Loading CameraServer..."); - try { - CameraServerJNI.forceLoad(); - CameraServerCvJNI.forceLoad(); - } catch (UnsatisfiedLinkError | IOException e) { - if (CurrentPlatform.isWindows()) { - System.err.println("Try to download the VC++ Redistributable, https://aka.ms/vs/16/release/vc_redist.x64.exe"); - } - throw new RuntimeException("Failed to load JNI Libraries!"); - } - - System.out.println("Checking Settings..."); - ConfigManager.initializeSettings(); - - if (!CurrentPlatform.isWindows()) { - System.out.println("Initializing Script Manager..."); - ScriptManager.initialize(); - } else { - System.out.println("Scripts not yet supported on Windows. ScriptEvents will be ignored."); - } - - NetworkManager.initialize(manageNetwork); - - if (ntServerMode) { - NetworkTablesManager.setServerMode(); - } else { - NetworkTablesManager.setClientMode(ntClientModeServer); - } - - ScriptManager.queueEvent(ScriptEventType.kProgramInit); - - boolean visionSourcesOk = VisionManager.initializeSources(); - if (!visionSourcesOk) { - System.err.println("No cameras connected!"); - return; - } - - boolean visionProcessesOk = VisionManager.initializeProcesses(); - if (!visionProcessesOk) { - System.err.println("Failed to initialize vision processes!"); - return; - } - - System.out.println("Starting vision processes..."); - VisionManager.startProcesses(); - - System.out.printf("Starting Web server at port %d\n", uiPort); - Server.main(uiPort); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFile.java b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFile.java new file mode 100644 index 000000000..944740039 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFile.java @@ -0,0 +1,12 @@ +package com.chameleonvision.common.configuration; + +public class ConfigFile { + + /** + * Represents a config file at a fixed path + * @param path Path to config file + */ + public ConfigFile(String path) { + + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFolder.java b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFolder.java new file mode 100644 index 000000000..67d060410 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigFolder.java @@ -0,0 +1,12 @@ +package com.chameleonvision.common.configuration; + +public class ConfigFolder { + + /** + * Represents a folder of config files + * @param path path to config file + */ + public ConfigFolder(String path) { + + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigManager.java b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigManager.java new file mode 100644 index 000000000..2b5ea6f2e --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/configuration/ConfigManager.java @@ -0,0 +1,24 @@ +package com.chameleonvision.common.configuration; + +import com.chameleonvision.common.server.configuration.MainConfig; + +public class ConfigManager { + + private final ConfigFolder rootFolder; + final MainConfig mainConfig; + + protected ConfigManager() { + + rootFolder = new ConfigFolder(""); + + mainConfig = MainConfig.getInstance(); + } + + private static class SingletonHolder { + private static final ConfigManager INSTANCE = new ConfigManager(); + } + + public static ConfigManager getInstance() { + return SingletonHolder.INSTANCE; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/LinuxNetworking.java b/chameleon-server/src/main/java/com/chameleonvision/common/network/LinuxNetworking.java similarity index 92% rename from chameleon-server/src/main/java/com/chameleonvision/network/LinuxNetworking.java rename to chameleon-server/src/main/java/com/chameleonvision/common/network/LinuxNetworking.java index 47ae1a47d..13628893b 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/network/LinuxNetworking.java +++ b/chameleon-server/src/main/java/com/chameleonvision/common/network/LinuxNetworking.java @@ -1,4 +1,4 @@ -package com.chameleonvision.network; +package com.chameleonvision.common.network; import org.apache.commons.io.FileUtils; @@ -44,7 +44,7 @@ public class LinuxNetworking extends SysNetworking { } } else { - System.err.println("dhcpcd5 is not installed cant set ip"); + System.err.println("dhcpcd5 is not installed, unable to set IP."); return false; } return true; @@ -52,9 +52,8 @@ public class LinuxNetworking extends SysNetworking { @Override public boolean setHostname(String newHostname) { - String[] setHostnameArgs = {"set-hostname", newHostname}; try { - var setHostnameRetCode = shell.execute("hostnamectl", setHostnameArgs); + var setHostnameRetCode = shell.execute("hostnamectl", "set-hostname", newHostname); return setHostnameRetCode == 0; } catch (Exception e) { e.printStackTrace(); @@ -70,7 +69,7 @@ public class LinuxNetworking extends SysNetworking { List lines = FileUtils.readLines(dhcpConf, StandardCharsets.UTF_8); lines.add("interface " + networkInterface.name); InetAddress iNetMask = InetAddress.getByName(netmask); - int prefix = NetmaskToCIDR.convertNetmaskToCIDR(iNetMask); + int prefix = convertNetmaskToCIDR(iNetMask); lines.add("static ip_address=" + ipAddress + "/" + prefix); lines.add("static routers=" + gateway); FileUtils.writeLines(dhcpConf, lines); @@ -81,7 +80,6 @@ public class LinuxNetworking extends SysNetworking { return false; } - @Override public List getNetworkInterfaces() throws SocketException { List netInterfaces; diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkInterface.java b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkInterface.java similarity index 69% rename from chameleon-server/src/main/java/com/chameleonvision/network/NetworkInterface.java rename to chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkInterface.java index 7eedcfc88..99b9bc91a 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkInterface.java +++ b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkInterface.java @@ -1,22 +1,22 @@ -package com.chameleonvision.network; +package com.chameleonvision.common.network; import java.net.InterfaceAddress; @SuppressWarnings("WeakerAccess") public class NetworkInterface { - public final String name; - public final String displayName; - public final String IPAddress; - public final String Netmask; - public final String Gateway; - public final String Broadcast; + public final String name; + public final String displayName; + public final String IPAddress; + public final String Netmask; + public final String Gateway; + public final String Broadcast; - public NetworkInterface(java.net.NetworkInterface inetface, InterfaceAddress ifaceAddress) { - name = inetface.getName(); - displayName = inetface.getDisplayName(); + public NetworkInterface(java.net.NetworkInterface inetface, InterfaceAddress ifaceAddress) { + name = inetface.getName(); + displayName = inetface.getDisplayName(); - var inetAddress = ifaceAddress.getAddress(); - IPAddress = inetAddress.getHostAddress(); + var inetAddress = ifaceAddress.getAddress(); + IPAddress = inetAddress.getHostAddress(); Netmask = getIPv4LocalNetMask(ifaceAddress); // TODO: (low) hack to "get" gateway, this is gross and bad, pls fix @@ -25,10 +25,10 @@ public class NetworkInterface { Gateway = String.join(".", splitIPAddr); splitIPAddr[3] = "255"; Broadcast = String.join(".", splitIPAddr); - } + } private static String getIPv4LocalNetMask(InterfaceAddress interfaceAddress) { - var netPrefix = interfaceAddress.getNetworkPrefixLength(); + var netPrefix = interfaceAddress.getNetworkPrefixLength(); try { // Since this is for IPv4, it's 32 bits, so set the sign value of // the int to "negative"... @@ -41,7 +41,7 @@ public class NetworkInterface { } // Transform the resulting value in xxx.xxx.xxx.xxx format, like if /// it was a standard address... - // Return the address thus created... + // Return the address thus created... return ((shiftby >> 24) & 255) + "." + ((shiftby >> 16) & 255) + "." + ((shiftby >> 8) & 255) + "." + (shiftby & 255); // return InetAddress.getByName(maskString); } diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkManager.java b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkManager.java new file mode 100644 index 000000000..a3958ca90 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkManager.java @@ -0,0 +1,23 @@ +package com.chameleonvision.common.network; + +public class NetworkManager { + private NetworkManager() {} + + private static class SingletonHolder { + private static final NetworkManager INSTANCE = new NetworkManager(); + } + + public static NetworkManager getInstance() { + return SingletonHolder.INSTANCE; + } + + private boolean isManaged = false; + + public void initialize(boolean shouldManage) { + isManaged = shouldManage; + if (!isManaged) { + return; + } + + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkMode.java b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkMode.java new file mode 100644 index 000000000..aa979670c --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/network/NetworkMode.java @@ -0,0 +1,6 @@ +package com.chameleonvision.common.network; + +public enum NetworkMode { + DHCP, + STATIC +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/network/SysNetworking.java b/chameleon-server/src/main/java/com/chameleonvision/common/network/SysNetworking.java new file mode 100644 index 000000000..212b79eb9 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/network/SysNetworking.java @@ -0,0 +1,63 @@ +package com.chameleonvision.common.network; + +import com.chameleonvision.common.server.util.ShellExec; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.SocketException; +import java.util.List; + +public abstract class SysNetworking { + NetworkInterface networkInterface; + ShellExec shell = new ShellExec(true, true); + + private String hostname = getHostname(); + + public String getHostname() { + if (hostname == null) { + try { + var retCode = shell.execute("hostname", null, true); + if (retCode == 0) { + while(!shell.isOutputCompleted()) {} + return shell.getOutput(); + } else { + return null; + } + } catch (IOException e) { + return null; + } + } else return hostname; + } + + //code belongs to https://stackoverflow.com/questions/19531411/calculate-cidr-from-a-given-netmask-java + public static int convertNetmaskToCIDR(InetAddress netmask) { + + byte[] netmaskBytes = netmask.getAddress(); + int cidr = 0; + boolean zero = false; + for (byte b : netmaskBytes) { + int mask = 0x80; + + for (int i = 0; i < 8; i++) { + int result = b & mask; + if (result == 0) { + zero = true; + } else if (zero) { + throw new IllegalArgumentException("Invalid netmask."); + } else { + cidr++; + } + mask >>>= 1; + } + } + return cidr; + } + + public void setNetworkInterface(NetworkInterface networkInterface) { + this.networkInterface = networkInterface; + } + public abstract boolean setDHCP(); + public abstract boolean setHostname(String hostname); + public abstract boolean setStatic(String ipAddress, String netmask, String gateway); + public abstract List getNetworkInterfaces() throws SocketException; +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/MainConfig.java b/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/MainConfig.java new file mode 100644 index 000000000..64d1ca481 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/MainConfig.java @@ -0,0 +1,21 @@ +package com.chameleonvision.common.server.configuration; + +import com.chameleonvision.common.configuration.ConfigFile; + +public class MainConfig extends ConfigFile { + + public int teamNumber = 0; + public boolean ntServer = false; + + private MainConfig() { + super("general"); + } + + private static class SingletonHolder { + private static final MainConfig INSTANCE = new MainConfig(); + } + + public static MainConfig getInstance() { + return SingletonHolder.INSTANCE; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/NetworkConfig.java b/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/NetworkConfig.java new file mode 100644 index 000000000..2e40b825b --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/server/configuration/NetworkConfig.java @@ -0,0 +1,23 @@ +package com.chameleonvision.common.server.configuration; + +import com.chameleonvision.common.configuration.ConfigFile; +import com.chameleonvision.common.network.NetworkMode; + +public class NetworkConfig extends ConfigFile { + + public NetworkMode networkMode = NetworkMode.DHCP; + public String ip = ""; + public String hostname = "chameleon-vision"; + + private NetworkConfig() { + super("network"); + } + + private static class SingletonHolder { + private static final NetworkConfig INSTANCE = new NetworkConfig(); + } + + public static NetworkConfig getInstance() { + return SingletonHolder.INSTANCE; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/server/util/Platform.java b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/Platform.java new file mode 100644 index 000000000..dc38da09d --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/Platform.java @@ -0,0 +1,109 @@ +package com.chameleonvision.common.server.util; + +import edu.wpi.first.wpiutil.RuntimeDetector; + +import java.io.IOException; + +@SuppressWarnings("unused") +public enum Platform { + // WPILib Supported (JNI) + WINDOWS_32("Windows x32"), + WINDOWS_64("Windows x64"), + LINUX_64("Linux x64"), + LINUX_RASPBIAN("Linux Raspbian"), // Raspberry Pi 3/4 + LINUX_AARCH64BIONIC("Linux AARCH64 Bionic"), // Jetson Nano, Jetson TX2 + MACOS_64("Mac OS x64"), + + // ChameleonVision Supported (Manual install) + LINUX_ARM32("Linux ARM32"), // ODROID XU4, C1+ + LINUX_ARM64("Linux ARM64"), // ODROID C2, N2 + + // Completely unsupported + UNSUPPORTED("Unsupported Platform"); + + public final String value; + public final boolean isRoot = checkForRoot(); + + Platform(String value) { + this.value = value; + } + + private static final String OS_NAME = System.getProperty("os.name"); + private static final String OS_ARCH = System.getProperty("os.arch"); + public static final Platform CurrentPlatform = getCurrentPlatform(); + + private static String UnknownPlatformString = String.format("Unknown Platform. OS: %s, Architecture: %s", OS_NAME, OS_ARCH); + + public boolean isWindows() { + return this == WINDOWS_64 || this == WINDOWS_32; + } + + public boolean isLinux() { + return this == LINUX_64 || this == LINUX_RASPBIAN || this == LINUX_ARM64; + } + + public boolean isMac() { + return this == MACOS_64; + } + + public static boolean isRaspberryPi() { + return CurrentPlatform.equals(LINUX_RASPBIAN); + } + + private static ShellExec shell = new ShellExec(true, false); + + @SuppressWarnings("StatementWithEmptyBody") + private boolean checkForRoot() { + if (isLinux() || isMac()) { + try { + shell.execute("id", null, true, "-u"); + } catch (IOException e) { + e.printStackTrace(); + } + + // TODO: better way to do this? + while (!shell.isOutputCompleted()) { + // ignored + } + + if (shell.getExitCode() == 0) { + return shell.getOutput().split("\n")[0].equals("0"); + } + + } else { + return true; + } + return false; + } + + private static Platform getCurrentPlatform() { + if (RuntimeDetector.isWindows()) { + if (RuntimeDetector.is32BitIntel()) return WINDOWS_32; + if (RuntimeDetector.is64BitIntel()) return WINDOWS_64; + } + + if (RuntimeDetector.isMac()) { + if (RuntimeDetector.is32BitIntel()) return UNSUPPORTED; + if (RuntimeDetector.is64BitIntel()) return MACOS_64; + } + + if (RuntimeDetector.isLinux()) { + if (RuntimeDetector.is32BitIntel()) return UNSUPPORTED; + if (RuntimeDetector.is64BitIntel()) return LINUX_64; + if (RuntimeDetector.isRaspbian()) return LINUX_RASPBIAN; + + } + + System.out.println(UnknownPlatformString); + return Platform.UNSUPPORTED; + } + + + public String toString() { + if (this.equals(UNSUPPORTED)) { + return UnknownPlatformString; + } else { + return this.value; + } + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/ShellExec.java b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExec.java similarity index 90% rename from chameleon-server/src/main/java/com/chameleonvision/util/ShellExec.java rename to chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExec.java index 60856cf79..16ee97af0 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/util/ShellExec.java +++ b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExec.java @@ -1,10 +1,11 @@ -package com.chameleonvision.util; +package com.chameleonvision.common.server.util; import java.io.*; /** * Execute external process and optionally read output buffer. */ +@SuppressWarnings({"unused", "ConstantConditions"}) public class ShellExec { private int exitCode; private boolean readOutput, readError; @@ -23,7 +24,7 @@ public class ShellExec { * Execute a bash command. We can handle complex bash commands including * multiple executions (; | && ||), quotes, expansions ($), escapes (\), e.g.: * "cd /abc/def; mv ghi 'older ghi '$(whoami)" - * @param command + * @param command Bash command to execute * @return true if bash got started, but your command may have failed. */ public int executeBashCommand(String command) throws IOException { @@ -41,19 +42,7 @@ public class ShellExec { // Consume streams, older jvm's had a memory leak if streams were not read, // some other jvm+OS combinations may block unless streams are consumed. - errorGobbler = new StreamGobbler(process.getErrorStream(), readError); - outputGobbler = new StreamGobbler(process.getInputStream(), readOutput); - errorGobbler.start(); - outputGobbler.start(); - - exitCode = 0; - if (wait) { - try { - process.waitFor(); - exitCode = process.exitValue(); - } catch (InterruptedException ignored) { } - } - return exitCode; + return doProcess(wait, process); } /** @@ -92,7 +81,11 @@ public class ShellExec { // Consume streams, older jvm's had a memory leak if streams were not read, // some other jvm+OS combinations may block unless streams are consumed. - errorGobbler = new StreamGobbler(process.getErrorStream(), readError); + return doProcess(wait, process); + } + + private int doProcess(boolean wait, Process process) { + errorGobbler = new StreamGobbler(process.getErrorStream(), readError); outputGobbler = new StreamGobbler(process.getInputStream(), readOutput); errorGobbler.start(); outputGobbler.start(); @@ -169,7 +162,7 @@ public class ShellExec { /** * Get inputstream buffer or null if stream * was not consumed. - * @return + * @return Output stream */ public String getOutput() { return (output != null ? output.toString() : null); @@ -177,7 +170,7 @@ public class ShellExec { /** * Is input stream completed. - * @return + * @return if input stream is completed */ public boolean isCompleted() { return completed; diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExecutor.java b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExecutor.java new file mode 100644 index 000000000..bf79ed2b9 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/server/util/ShellExecutor.java @@ -0,0 +1,45 @@ +package com.chameleonvision.common.server.util; + +import org.apache.commons.exec.*; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; + +// TODO: Finish me! +@SuppressWarnings({"FieldCanBeLocal", "unused"}) +public class ShellExecutor { + + private final Executor executor; + private final ExecuteWatchdog watchdog; + private final DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler(); + private final OutputStream stdOutStream = new ByteArrayOutputStream(); + private final OutputStream stdErrStream = new ByteArrayOutputStream(); + private final boolean block; + + public ShellExecutor(String command, boolean block, int timeoutMillis, String... args) { + this.block = block; + + CommandLine cmdLine = new CommandLine(command); + cmdLine.addArguments(args); + + watchdog = new ExecuteWatchdog(timeoutMillis); + executor = new DefaultExecutor(); + executor.setWatchdog(watchdog); + executor.setStreamHandler(new PumpStreamHandler(stdOutStream, stdErrStream)); + } + +// public int execute() { +// if () +// } + + public String getStdOut() { + if (!watchdog.isWatching()) { + return executor.toString(); + } + return ""; + } + + public String getStdErr() { + return ""; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/camera/USBCamera.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/camera/USBCamera.java new file mode 100644 index 000000000..c792006e4 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/camera/USBCamera.java @@ -0,0 +1,6 @@ +package com.chameleonvision.common.vision.base.camera; + +import com.chameleonvision.common.vision.base.capture.USBFrameProvider; + +public class USBCamera extends USBFrameProvider { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/FileFrameProvider.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/FileFrameProvider.java new file mode 100644 index 000000000..09df97e15 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/FileFrameProvider.java @@ -0,0 +1,12 @@ +package com.chameleonvision.common.vision.base.capture; + +import com.chameleonvision.common.vision.base.frame.Frame; +import com.chameleonvision.common.vision.base.frame.FrameProvider; +import org.apache.commons.lang3.NotImplementedException; + +public class FileFrameProvider implements FrameProvider { + @Override + public Frame getFrame() { + throw new NotImplementedException(""); + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/NetworkFrameProvider.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/NetworkFrameProvider.java new file mode 100644 index 000000000..a236ad8a7 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/NetworkFrameProvider.java @@ -0,0 +1,12 @@ +package com.chameleonvision.common.vision.base.capture; + +import com.chameleonvision.common.vision.base.frame.Frame; +import com.chameleonvision.common.vision.base.frame.FrameProvider; +import org.apache.commons.lang3.NotImplementedException; + +public class NetworkFrameProvider implements FrameProvider { + @Override + public Frame getFrame() { + throw new NotImplementedException(""); + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/USBFrameProvider.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/USBFrameProvider.java new file mode 100644 index 000000000..0b96d2f94 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/capture/USBFrameProvider.java @@ -0,0 +1,12 @@ +package com.chameleonvision.common.vision.base.capture; + +import com.chameleonvision.common.vision.base.frame.Frame; +import com.chameleonvision.common.vision.base.frame.FrameProvider; +import org.apache.commons.lang3.NotImplementedException; + +public class USBFrameProvider implements FrameProvider { + @Override + public Frame getFrame() { + throw new NotImplementedException(""); + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/Frame.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/Frame.java new file mode 100644 index 000000000..b8950c68b --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/Frame.java @@ -0,0 +1,10 @@ +package com.chameleonvision.common.vision.base.frame; + +import org.opencv.core.Mat; +import org.opencv.core.Size; + +public class Frame { + public long timestamp; + public Mat image; + public Size imageSize; +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameConsumer.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameConsumer.java new file mode 100644 index 000000000..2374a21f6 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameConsumer.java @@ -0,0 +1,5 @@ +package com.chameleonvision.common.vision.base.frame; + +public interface FrameConsumer { + +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameProvider.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameProvider.java new file mode 100644 index 000000000..be8ce43e0 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/frame/FrameProvider.java @@ -0,0 +1,5 @@ +package com.chameleonvision.common.vision.base.frame; + +public interface FrameProvider { + Frame getFrame(); +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/Pipe.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/Pipe.java new file mode 100644 index 000000000..7a9610f06 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/Pipe.java @@ -0,0 +1,37 @@ +package com.chameleonvision.common.vision.base.pipeline; + +import java.util.function.Function; + +/** + * Defines a pipe. A pipe is a single step in a pipeline. + * This class is to be extended, never used on its own. + * + * @param Input type for the pipe + * @param Output type for the pipe + */ +public abstract class Pipe implements Function> { + + private PipeResult result = new PipeResult<>(); + + /** + * Runs the process for the pipe. + * + * @param in Input for pipe processing + * @return Result of processing + */ + protected abstract O process(I in); + + /** + * + * + * @param in Input for pipe processing + * @return Result of processing + */ + @Override + public PipeResult apply(I in) { + long pipeStartNanos = System.nanoTime(); + result.result = process(in); + result.nanosElapsed = System.nanoTime() - pipeStartNanos; + return result; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/PipeResult.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/PipeResult.java new file mode 100644 index 000000000..dfdb9b576 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/PipeResult.java @@ -0,0 +1,6 @@ +package com.chameleonvision.common.vision.base.pipeline; + +public class PipeResult { + O result; + long nanosElapsed; +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/ResizeImagePipe.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/ResizeImagePipe.java new file mode 100644 index 000000000..b17324026 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/ResizeImagePipe.java @@ -0,0 +1,16 @@ +package com.chameleonvision.common.vision.base.pipeline.pipe; + +import com.chameleonvision.common.vision.base.pipeline.Pipe; +import org.opencv.core.Mat; + +public class ResizeImagePipe extends Pipe { + + public ResizeImagePipe() { + + } + + @Override + protected Mat process(Mat in) { + return null; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/javacv/GPUResizeImagePipe.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/javacv/GPUResizeImagePipe.java new file mode 100644 index 000000000..46c6216c1 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/pipeline/pipe/javacv/GPUResizeImagePipe.java @@ -0,0 +1,16 @@ +package com.chameleonvision.common.vision.base.pipeline.pipe.javacv; + +import com.chameleonvision.common.vision.base.pipeline.Pipe; +import org.bytedeco.opencv.opencv_core.GpuMat; + +public class GPUResizeImagePipe extends Pipe { + + public GPUResizeImagePipe() { + + } + + @Override + protected GpuMat process(GpuMat in) { + return null; + } +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/AsyncMjpgStreamer.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/AsyncMjpgStreamer.java new file mode 100644 index 000000000..f59486fa4 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/AsyncMjpgStreamer.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.base.stream; + +public class AsyncMjpgStreamer extends MjpgStreamer { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/MjpgStreamer.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/MjpgStreamer.java new file mode 100644 index 000000000..decd48963 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/MjpgStreamer.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.base.stream; + +public class MjpgStreamer { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/Streamer.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/Streamer.java new file mode 100644 index 000000000..6bb6450e2 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/base/stream/Streamer.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.base.stream; + +public interface Streamer { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/opencv/OpenCVWrapper.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/opencv/OpenCVWrapper.java new file mode 100644 index 000000000..4457f598d --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/opencv/OpenCVWrapper.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.opencv; + +public class OpenCVWrapper { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/KnownTarget.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/KnownTarget.java new file mode 100644 index 000000000..739b30781 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/KnownTarget.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.target; + +public class KnownTarget { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/TrackedTarget.java b/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/TrackedTarget.java new file mode 100644 index 000000000..169950a7d --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/common/vision/target/TrackedTarget.java @@ -0,0 +1,4 @@ +package com.chameleonvision.common.vision.target; + +public class TrackedTarget { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/CVPipelineSettingsList.java b/chameleon-server/src/main/java/com/chameleonvision/config/CVPipelineSettingsList.java deleted file mode 100644 index f9c61a48e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/CVPipelineSettingsList.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.vision.pipeline.CVPipelineSettings; - -import java.util.List; - -public interface CVPipelineSettingsList extends List { -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/CameraCalibrationConfig.java b/chameleon-server/src/main/java/com/chameleonvision/config/CameraCalibrationConfig.java deleted file mode 100644 index 2dbed87b2..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/CameraCalibrationConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.chameleonvision.config; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreType; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.opencv.core.Mat; -import org.opencv.core.MatOfDouble; -import org.opencv.core.Size; - -/** - * A class that holds a camera matrix and distortion coefficients for a given resolution - */ -public class CameraCalibrationConfig { - @JsonProperty("resolution") public final Size resolution; - @JsonProperty("cameraMatrix") public final JsonMat cameraMatrix; - @JsonProperty("distortionCoeffs") public final JsonMat distortionCoeffs; - @JsonProperty("squareSize") public final double squareSize; - - @JsonCreator - public CameraCalibrationConfig( - @JsonProperty("resolution") Size resolution, - @JsonProperty("cameraMatrix") JsonMat cameraMatrix, - @JsonProperty("distortionCoeffs") JsonMat distortionCoeffs, - @JsonProperty("squareSize") double squareSize) { - this.resolution = resolution; - this.cameraMatrix = cameraMatrix; - this.distortionCoeffs = distortionCoeffs; - this.squareSize = squareSize; - } - - public CameraCalibrationConfig(Size resolution, Mat cameraMatrix, Mat distortionCoeffs, double squareSize) { - this.resolution = resolution; - this.cameraMatrix = JsonMat.fromMat(cameraMatrix); - this.distortionCoeffs = JsonMat.fromMat(distortionCoeffs); - this.squareSize = squareSize; - } - - @JsonIgnoreType - public static class UICameraCalibrationConfig { - public final int width; - public final int height; - public final double[] cameraMatrix; - public final double[] distortionCoeffs; - - public UICameraCalibrationConfig(CameraCalibrationConfig config) { - width = (int) config.resolution.width; - height = (int) config.resolution.height; - cameraMatrix = config.cameraMatrix.data; - distortionCoeffs = config.distortionCoeffs.data; - } - - } - - @JsonIgnore - public Mat getCameraMatrixAsMat() { - return cameraMatrix.toMat(); - } - - @JsonIgnore - public MatOfDouble getDistortionCoeffsAsMat() { - return new MatOfDouble(distortionCoeffs.toMat()); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/CameraConfig.java b/chameleon-server/src/main/java/com/chameleonvision/config/CameraConfig.java deleted file mode 100644 index 7c5b1e0e7..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/CameraConfig.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.util.FileHelper; -import com.chameleonvision.util.JacksonHelper; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class CameraConfig { - - private static final Path camerasConfigFolderPath = Path.of(ConfigManager.SettingsPath.toString(), "cameras"); - - private final CameraJsonConfig preliminaryConfig; - private final Path configFolderPath; - private final Path configPath; - private final Path driverModePath; - private final Path calibrationPath; - final Path pipelineFolderPath; - - public final PipelineConfig pipelineConfig; - - CameraConfig(CameraJsonConfig config) { - preliminaryConfig = config; - String cameraConfigName = preliminaryConfig.name.replace(' ', '_'); - pipelineConfig = new PipelineConfig(this); - - configFolderPath = Path.of(camerasConfigFolderPath.toString(), cameraConfigName); - configPath = Path.of(configFolderPath.toString(), "camera.json"); - driverModePath = Path.of(configFolderPath.toString(), "drivermode.json"); - calibrationPath = Path.of(configFolderPath.toString(), "calibration.json"); - pipelineFolderPath = Paths.get(configFolderPath.toString(), "pipelines"); - } - - public FullCameraConfiguration load() { - checkFolder(); - checkConfig(); - checkDriverMode(); - checkCalibration(); - pipelineConfig.check(); - - return new FullCameraConfiguration(loadConfig(), pipelineConfig.load(), loadDriverMode(), loadCalibration(), this); - } - - private CameraJsonConfig loadConfig() { - CameraJsonConfig config = preliminaryConfig; - try { - config = JacksonHelper.deserialize(configPath, CameraJsonConfig.class); - } catch (IOException e) { - System.err.printf("Failed to load camera config: %s - using default.\n", configPath.toString()); - } - return config; - } - - private CVPipelineSettings loadDriverMode() { - CVPipelineSettings driverMode = new CVPipelineSettings(); - try { - driverMode = JacksonHelper.deserialize(driverModePath, CVPipelineSettings.class); - } catch (IOException e) { - System.err.println("Failed to load camera drivermode: " + driverModePath.toString()); - } - if (driverMode != null) { - driverMode.nickname = "DRIVERMODE"; - driverMode.index = -1; - } - return driverMode; - } - - private List loadCalibration() { - List calibrations = new ArrayList<>(); - try { - calibrations = List.of(Objects.requireNonNull(JacksonHelper.deserialize(calibrationPath, CameraCalibrationConfig[].class))); - } catch (Exception e) { - System.err.println("Failed to load camera calibration: " + driverModePath.toString()); - } - return calibrations; - } - - void saveConfig(CameraJsonConfig config) { - try { - JacksonHelper.serializer(configPath, config, true); - FileHelper.setFilePerms(configPath); - } catch (IOException e) { - System.err.println("Failed to save camera config file: " + configPath.toString()); - } - } - - void savePipelines(List pipelines) { - pipelineConfig.save(pipelines); - } - - public void saveDriverMode(CVPipelineSettings driverMode) { - try { - JacksonHelper.serializer(driverModePath, driverMode, true); - FileHelper.setFilePerms(driverModePath); - } catch (IOException e) { - System.err.println("Failed to save camera drivermode file: " + driverModePath.toString()); - } - } - - - public void saveCalibration(List cal) { - CameraCalibrationConfig[] configs = cal.toArray(new CameraCalibrationConfig[0]); - try { - JacksonHelper.serializer(calibrationPath, configs, true); - FileHelper.setFilePerms(calibrationPath); - } catch (IOException e) { - System.err.println("Failed to save camera calibration file: " + calibrationPath.toString()); - } - } - - void checkFolder() { - if (!configFolderExists()) { - try { - if (!(new File(configFolderPath.toUri()).mkdirs())) { - System.err.println("Failed to create camera config folder: " + configFolderPath.toString()); - } - FileHelper.setFilePerms(configFolderPath); - } catch (Exception e) { - System.err.println("Failed to create camera config folder: " + configFolderPath.toString()); - } - } - } - - private void checkConfig() { - if (!configExists()) { - try { - JacksonHelper.serializer(configPath, preliminaryConfig, true); - FileHelper.setFilePerms(configPath); - } catch (IOException e) { - System.err.println("Failed to create camera config file: " + configPath.toString()); - } - } - } - - private void checkDriverMode() { - if (!driverModeExists()) { - try { - CVPipelineSettings newDriverModeSettings = new CVPipelineSettings(); - newDriverModeSettings.nickname = "DRIVERMODE"; - JacksonHelper.serializer(driverModePath, newDriverModeSettings, true); - FileHelper.setFilePerms(driverModePath); - } catch (IOException e) { - System.err.println("Failed to create camera drivermode file: " + driverModePath.toString()); - } - } - } - - private void checkCalibration() { - if (!calibrationExists()) { - try { - List calibrations = new ArrayList<>(); - JacksonHelper.serializer(calibrationPath, calibrations.toArray(), true); - } catch (IOException e) { - System.err.println("Failed to create camera calibration file: " + calibrationPath.toString()); - } - } - } - - private boolean configFolderExists() { - return Files.exists(configFolderPath); - } - - private boolean configExists() { - return configFolderExists() && Files.exists(configPath); - } - - private boolean driverModeExists() { - return configFolderExists() && Files.exists(driverModePath); - } - - private boolean calibrationExists() { - return configFolderExists() && Files.exists(calibrationPath); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/CameraJsonConfig.java b/chameleon-server/src/main/java/com/chameleonvision/config/CameraJsonConfig.java deleted file mode 100644 index 0411ca7e0..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/CameraJsonConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.vision.VisionProcess; -import com.chameleonvision.vision.camera.USBCaptureProperties; -import com.chameleonvision.vision.enums.StreamDivisor; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class CameraJsonConfig { - public final double fov; - public final String path; - public final String name; - public final String nickname; - public final int videomode; - public final double tilt; - public final StreamDivisor streamDivisor; - - @JsonCreator - public CameraJsonConfig( - @JsonProperty("fov") double fov, - @JsonProperty("path") String path, - @JsonProperty("name") String name, - @JsonProperty("nickname") String nickname, - @JsonProperty("videomode") int videomode, - @JsonProperty("streamDivisor") StreamDivisor streamDivisor, - @JsonProperty("tilt") double tilt) { - this.fov = fov; - this.path = path; - this.name = name; - this.nickname = nickname; - this.videomode = videomode; - this.streamDivisor = streamDivisor; - this.tilt = tilt; - } - - public CameraJsonConfig(String path, String name) { - this.fov = USBCaptureProperties.DEFAULT_FOV; - this.path = path; - this.name = name; - this.nickname = name; - this.videomode = 0; - this.streamDivisor = StreamDivisor.NONE; - this.tilt = 0; - } - - public static CameraJsonConfig fromVisionProcess(VisionProcess process) { - USBCaptureProperties camProps = process.getCamera().getProperties(); - int videomode = camProps.getCurrentVideoModeIndex(); - StreamDivisor streamDivisor = process.cameraStreamer.getDivisor(); - double tilt = process.getCamera().getProperties().getTilt().getDegrees(); - return new CameraJsonConfig(camProps.getFOV(), camProps.path, camProps.name, camProps.getNickname(), videomode, streamDivisor, tilt); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/ConfigManager.java b/chameleon-server/src/main/java/com/chameleonvision/config/ConfigManager.java deleted file mode 100644 index 5acc18625..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/ConfigManager.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.util.*; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; - -public class ConfigManager { - private ConfigManager() { - } - - public static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings"); - private static final Path settingsFilePath = Paths.get(SettingsPath.toString(), "settings.json"); - - private static final LinkedHashMap cameraConfigs = new LinkedHashMap<>(); - - public static GeneralSettings settings = new GeneralSettings(); - - private static boolean settingsFolderExists() { - return Files.exists(SettingsPath); - } - - private static boolean settingsFileExists() { - return settingsFolderExists() && Files.exists(settingsFilePath); - } - - private static void checkSettingsFolder() { - if (!settingsFolderExists()) { - try { - if (!(new File(SettingsPath.toUri()).mkdirs())) { - System.err.println("Failed to create settings folder: " + SettingsPath.toString()); - } - Files.createDirectory(SettingsPath); - if (!Platform.CurrentPlatform.isWindows()) { - new ShellExec().executeBashCommand("sudo chmod -R 0777 " + SettingsPath.toString()); - } - } catch (IOException e) { - if (!(e instanceof java.nio.file.FileAlreadyExistsException)) - e.printStackTrace(); - } - } - } - - private static void checkSettingsFile() { - boolean settingsFileEmpty = settingsFileExists() && new File(settingsFilePath.toString()).length() == 0; - if (settingsFileEmpty || !settingsFileExists()) { - try { - JacksonHelper.serializer(settingsFilePath, settings, true); - FileHelper.setFilePerms(settingsFilePath); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - try { - settings = JacksonHelper.deserialize(settingsFilePath, GeneralSettings.class); - } catch (IOException e) { - System.err.println("Failed to load settings.json, using defaults."); - } - } - } - - public static void initializeSettings() { - System.out.println("Settings folder: " + SettingsPath.toString()); - checkSettingsFolder(); - checkSettingsFile(); - FileHelper.setAllPerms(SettingsPath); - } - - private static void saveSettingsFile() { - try { - JacksonHelper.serializer(settingsFilePath, settings, true); - FileHelper.setFilePerms(settingsFilePath); - } catch (IOException e) { - System.err.println("Failed to save settings.json!"); - } - } - - public static void saveGeneralSettings() { - checkSettingsFolder(); - saveSettingsFile(); - } - - public static List initializeCameras(List preliminaryConfigs) { - List configList = new ArrayList<>(); - - checkSettingsFolder(); - - // loop over all the camera names and try to create settings folders for it - for (CameraJsonConfig preliminaryConfig : preliminaryConfigs) { - CameraConfig cameraConfiguration = new CameraConfig(preliminaryConfig); - cameraConfigs.put(preliminaryConfig.name, cameraConfiguration); - - FullCameraConfiguration camJsonConfig = cameraConfiguration.load(); - - configList.add(camJsonConfig); - } - - return configList; - } - - public static void saveCameraConfig(String cameraName, CameraJsonConfig config) { - var camConf = cameraConfigs.get(cameraName); - camConf.saveConfig(config); - } - - public static void saveCameraPipelines(String cameraName, List pipelines) { - var camConf = cameraConfigs.get(cameraName); - camConf.savePipelines(pipelines); - } - - public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) { - var camConf = cameraConfigs.get(cameraName); - camConf.saveDriverMode(driverMode); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java b/chameleon-server/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java deleted file mode 100644 index 632526fbc..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.vision.pipeline.CVPipelineSettings; - -import java.util.List; - -public class FullCameraConfiguration { - public final CameraJsonConfig cameraConfig; - public final List pipelines; - public final CVPipelineSettings driverMode; - public final List calibration; - public final CameraConfig fileConfig; - - FullCameraConfiguration(CameraJsonConfig cameraConfig, List pipelines, CVPipelineSettings driverMode, List calibration, CameraConfig fileConfig) { - this.cameraConfig = cameraConfig; - this.pipelines = pipelines; - this.driverMode = driverMode; - this.calibration = calibration; - this.fileConfig = fileConfig; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/GeneralSettings.java b/chameleon-server/src/main/java/com/chameleonvision/config/GeneralSettings.java deleted file mode 100644 index 50f40a7db..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/GeneralSettings.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.network.NetworkIPMode; - -public class GeneralSettings { - public int teamNumber = 1577; - public NetworkIPMode connectionType = NetworkIPMode.DHCP; - public String ip = ""; - public String gateway = ""; - public String netmask = ""; - public String hostname = "Chameleon-vision"; - public String currentCamera = ""; - public Integer currentPipeline = null; -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/JsonMat.java b/chameleon-server/src/main/java/com/chameleonvision/config/JsonMat.java deleted file mode 100644 index fbdd6f1a4..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/JsonMat.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.chameleonvision.config; - -import com.fasterxml.jackson.annotation.JsonProperty; -import org.opencv.core.CvType; -import org.opencv.core.Mat; - -import java.util.Arrays; - - -public class JsonMat { - public final int rows; - public final int cols; - public final int type; - public final double[] data; - - public JsonMat(int rows, int cols, double[] data) { - this(rows, cols, CvType.CV_64FC1, data); - } - - public JsonMat( - @JsonProperty("rows") int rows, - @JsonProperty("cols") int cols, - @JsonProperty("type") int type, - @JsonProperty("data") double[] data) { - this.rows = rows; - this.cols = cols; - this.type = type; - this.data = data; - } - - public Mat toMat() { - return toMat(this); - } - - private static boolean isCameraMatrixMat(Mat mat) { - return mat.type() == CvType.CV_64FC1 && mat.cols() == 3 && mat.rows() == 3; - } - - private static boolean isDistortionCoeffsMat(Mat mat) { - return mat.type() == CvType.CV_64FC1 && mat.cols() == 5 && mat.rows() == 1; - } - - private static boolean isCalibrationMat(Mat mat) { - return isDistortionCoeffsMat(mat) || isCameraMatrixMat(mat); - } - - public static double[] getDataFromMat(Mat mat) { - if (!isCalibrationMat(mat)) return null; - - double[] data = new double[(int)(mat.total()*mat.elemSize())]; - mat.get(0, 0, data); - - int dataLen = -1; - - if (isCameraMatrixMat(mat)) dataLen = 9; - if (isDistortionCoeffsMat(mat)) dataLen = 5; - - // truncate Mat data to correct number data points. - return Arrays.copyOfRange(data, 0, dataLen); - } - - public static JsonMat fromMat(Mat mat) { - if (!isCalibrationMat(mat)) return null; - return new JsonMat(mat.rows(), mat.cols(), getDataFromMat(mat)); - } - - public static Mat toMat(JsonMat jsonMat) { - if (jsonMat.type != CvType.CV_64FC1) return null; - - Mat retMat = new Mat(jsonMat.rows, jsonMat.cols, jsonMat.type); - retMat.put(0, 0, jsonMat.data); - return retMat; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java b/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java deleted file mode 100644 index 2b7b2074e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.chameleonvision.config; - -import com.chameleonvision.config.serializers.StandardCVPipelineSettingsDeserializer; -import com.chameleonvision.config.serializers.StandardCVPipelineSettingsSerializer; -import com.chameleonvision.util.FileHelper; -import com.chameleonvision.util.JacksonHelper; -import com.chameleonvision.vision.pipeline.*; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -public class PipelineConfig { - - private final CameraConfig cameraConfig; - - /** - * Construct a new PipelineConfig - * - * @param cameraConfig the CameraConfig (parent folder, kinda?) - */ - PipelineConfig(CameraConfig cameraConfig) { - this.cameraConfig = cameraConfig; - } - - private void checkFolder() { - if (!(new File(cameraConfig.pipelineFolderPath.toUri()).mkdirs())) { - if (Files.notExists(cameraConfig.pipelineFolderPath)) { - System.err.println("Failed to create pipelines folder."); - } - } - try { - FileHelper.setFilePerms(cameraConfig.pipelineFolderPath); - } catch (IOException e) { - // ignored - } - } - - private File[] getPipelineFiles() { - return new File(cameraConfig.pipelineFolderPath.toUri()).listFiles(); - } - - private boolean folderHasPipelines() { - File[] folderContents = getPipelineFiles(); - if (folderContents == null) return false; - return folderContents.length > 0; - } - - void check() { - cameraConfig.checkFolder(); - checkFolder(); - // Check if there's at least one pipe - if (!folderHasPipelines()) { - save(new StandardCVPipelineSettings()); - } - } - - private Path getPipelinePath(CVPipelineSettings setting) { - String pipelineName = setting.nickname.replace(' ', '_'); - String fullFileName = pipelineName + ".json"; - return Path.of(cameraConfig.pipelineFolderPath.toString(), fullFileName); - } - - private boolean pipelineExists(CVPipelineSettings setting) { - return Files.exists(getPipelinePath(setting)); - } - - public void save(CVPipelineSettings settings) { - - var path = getPipelinePath(settings); - - if (settings instanceof StandardCVPipelineSettings) { - try { - JacksonHelper.serialize(path, (StandardCVPipelineSettings) settings, StandardCVPipelineSettings.class, new StandardCVPipelineSettingsSerializer(), true); - FileHelper.setFilePerms(path); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - try { - JacksonHelper.serializer(path, settings, true); - FileHelper.setFilePerms(path); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - public void save(List settings) { - for (CVPipelineSettings setting : settings) { - save(setting); - } - } - - public void delete(CVPipelineSettings setting) { - if (pipelineExists(setting)) { - try { - Files.delete(getPipelinePath(setting)); - } catch (IOException e) { - System.err.println("Failed to delete pipeline!"); - } - } - } - - public CVPipelineSettings rename(CVPipelineSettings setting, String newName) { - if (pipelineExists(setting)) { - delete(setting); - setting.nickname = newName; - save(setting); - } else { - setting.nickname = newName; - save(setting); - } - return setting; - } - - public List load() { - check(); // TODO: this ensures there will be a default pipeline. is the check later necessary? - - File[] pipelineFiles = getPipelineFiles(); - List deserializedList = new ArrayList<>(); - - if (pipelineFiles == null || pipelineFiles.length < 1) { - // TODO handle no pipelines to load - System.err.println("no pipes to load! loading default"); - } else { - for (File pipelineFile : pipelineFiles) { - try { - var pipe = JacksonHelper.deserialize(Paths.get(pipelineFile.getPath()), StandardCVPipelineSettings.class, new StandardCVPipelineSettingsDeserializer()); - deserializedList.add(pipe); - } catch (IOException e) { - System.err.println("couldn't load cvpipeline2d"); - } - } - } - - return deserializedList; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseDeserializer.java b/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseDeserializer.java deleted file mode 100644 index 69c5b86b3..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseDeserializer.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.chameleonvision.config.serializers; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.type.CollectionType; -import com.fasterxml.jackson.databind.type.TypeFactory; -import org.jetbrains.annotations.NotNull; -import org.opencv.core.MatOfPoint3f; -import org.opencv.core.Point3; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public abstract class BaseDeserializer extends StdDeserializer { - protected BaseDeserializer(Class vc) { - super(vc); - } - - JsonNode baseNode; - - private static final CollectionType numberListColType = TypeFactory.defaultInstance().constructCollectionType(List.class, Number.class); - private CollectionType pointListColType = TypeFactory.defaultInstance().constructCollectionType(List.class, Object.class); - private static final ObjectMapper mapper = new ObjectMapper(); - private static boolean nodeGood(JsonNode node) { - return node != null && !node.toString().equals(""); - } - - List getNumberList(String name, List defaultValue) throws JsonProcessingException { - JsonNode node = baseNode.get(name); - - if (nodeGood(node)) { - return mapper.readValue(node.toString(), numberListColType); - } - return defaultValue; - } - - boolean getBoolean(String name, boolean defaultValue) { - JsonNode node = baseNode.get(name); - - if (nodeGood(node)) { - return node.booleanValue(); - } - - return defaultValue; - } - - int getInt(String name, int defaultValue) { - return (int) getDouble(name, defaultValue); - } - - double getDouble(String name, double defaultValue) { - JsonNode node = baseNode.get(name); - - if (nodeGood(node)) { - return node.numberValue().doubleValue(); - } - - return defaultValue; - } - - String getString(String name, String defaultValue) { - JsonNode node = baseNode.get(name); - - if (nodeGood(node)) { - return node.asText(); - } - - return defaultValue; - } - - > E getEnum(String name, Class enumClass, E defaultValue) throws IOException { - JsonNode node = baseNode.get(name); - - if (nodeGood(node)) { - E[] possibleVals = enumClass.getEnumConstants(); - String jsonVal = baseNode.get(name).asText(); - - for (E val : possibleVals) { - if (val.name().equals(jsonVal)) { - return val; - } - } - } - - return defaultValue; - } - MatOfPoint3f getMatOfPoint3f(String name, MatOfPoint3f defaultValue) throws JsonProcessingException { - JsonNode node = baseNode.get(name); - if (nodeGood(node)){ - List> numberList = mapper.readValue(node.toString(), pointListColType); - List point3List = new ArrayList<>(); - for (List tmp : numberList){ - Point3 p = new Point3(); - p.x = tmp.get(0).doubleValue(); - p.y = tmp.get(1).doubleValue(); - p.z = tmp.get(2).doubleValue(); - point3List.add(p); - } - MatOfPoint3f mat = new MatOfPoint3f(); - mat.fromList(point3List); - return mat; - } - - return defaultValue; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseSerializer.java b/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseSerializer.java deleted file mode 100644 index fdfbb9db8..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/BaseSerializer.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.chameleonvision.config.serializers; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; -import org.opencv.core.MatOfPoint3f; -import org.opencv.core.Point; -import org.opencv.core.Point3; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public abstract class BaseSerializer extends StdSerializer { - protected BaseSerializer(Class t) { - super(t); - } - - JsonGenerator generator; - - void writeNumberListAsNumberArray(String name, List list) throws IOException { - generator.writeArrayFieldStart(name); - for (Number i : list) { - generator.writeObject(i); - } - generator.writeEndArray(); - } - - > void writeEnum(String name, E num) throws IOException { - generator.writeFieldName(name); - generator.writeString(num.name()); - } - - void writeMatOfPoint3f(String name, MatOfPoint3f mat) throws IOException { - List point3List = mat.toList(); - generator.writeArrayFieldStart(name); - - for (Point3 point3 : point3List) { - double[] tmp = {point3.x, point3.y, point3.z}; - generator.writeObject(tmp); - } - generator.writeEndArray(); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsDeserializer.java b/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsDeserializer.java deleted file mode 100644 index b68d1ccbf..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsDeserializer.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.chameleonvision.config.serializers; - -import com.chameleonvision.vision.enums.*; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.IntNode; - -import java.io.IOException; - -public class StandardCVPipelineSettingsDeserializer extends BaseDeserializer { - public StandardCVPipelineSettingsDeserializer() { - this(null); - } - - private StandardCVPipelineSettingsDeserializer(Class vc) { - super(vc); - } - - @Override - public StandardCVPipelineSettings deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { - // set BaseDeserializer parser reference. - baseNode = jsonParser.getCodec().readTree(jsonParser); - - StandardCVPipelineSettings pipeline = new StandardCVPipelineSettings(); - - pipeline.index = getInt("index", pipeline.index); - - pipeline.flipMode = getEnum("flipMode", ImageFlipMode.class, pipeline.flipMode); - pipeline.rotationMode = getEnum("rotationMode", ImageRotationMode.class, pipeline.rotationMode); - - pipeline.nickname = getString("nickname", pipeline.nickname); - - pipeline.exposure = getDouble("exposure", pipeline.exposure); - pipeline.brightness = getDouble("brightness", pipeline.brightness); - pipeline.gain = getDouble("gain", pipeline.gain); - - pipeline.videoModeIndex = getInt("videoModeIndex", pipeline.videoModeIndex); - - pipeline.streamDivisor = getEnum("streamDivisor", StreamDivisor.class, pipeline.streamDivisor); - - pipeline.hue = getNumberList("hue", pipeline.hue); - pipeline.saturation = getNumberList("saturation", pipeline.saturation); - pipeline.value = getNumberList("value", pipeline.value); - - pipeline.erode = getBoolean("erode", pipeline.erode); - pipeline.dilate = getBoolean("dilate", pipeline.dilate); - - pipeline.area = getNumberList("area", pipeline.area); - pipeline.ratio = getNumberList("ratio", pipeline.ratio); - pipeline.extent = getNumberList("extent", pipeline.extent); - - pipeline.speckle = getInt("speckle", (Integer) pipeline.speckle); - - pipeline.isBinary = getBoolean("isBinary", pipeline.isBinary); - - pipeline.sortMode = getEnum("sortMode", SortMode.class, pipeline.sortMode); - pipeline.targetRegion = getEnum("targetRegion", TargetRegion.class, pipeline.targetRegion); - pipeline.targetOrientation = getEnum("targetOrientation", TargetOrientation.class, pipeline.targetOrientation); - - pipeline.multiple = getBoolean("multiple", pipeline.multiple); - - pipeline.targetGroup = getEnum("targetGroup", TargetGroup.class, pipeline.targetGroup); - pipeline.targetIntersection = getEnum("targetIntersection", TargetIntersection.class, pipeline.targetIntersection); - - pipeline.point = getNumberList("point", pipeline.point); - - pipeline.calibrationMode = getEnum("calibrationMode", CalibrationMode.class, pipeline.calibrationMode); - - pipeline.dualTargetCalibrationM = getDouble("dualTargetCalibrationM", pipeline.dualTargetCalibrationM); - pipeline.dualTargetCalibrationB = getDouble("dualTargetCalibrationB", pipeline.dualTargetCalibrationB); - - pipeline.is3D = getBoolean("is3D", pipeline.is3D); - pipeline.targetCornerMat = getMatOfPoint3f("targetCornerMat", pipeline.targetCornerMat); - pipeline.accuracy = getDouble("accuracy", pipeline.accuracy.doubleValue()); - - return pipeline; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsSerializer.java b/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsSerializer.java deleted file mode 100644 index ee8958ed8..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/config/serializers/StandardCVPipelineSettingsSerializer.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.chameleonvision.config.serializers; - -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; - -import java.io.IOException; - -public class StandardCVPipelineSettingsSerializer extends BaseSerializer { - public StandardCVPipelineSettingsSerializer() { - this(null); - } - - private StandardCVPipelineSettingsSerializer(Class t) { - super(t); - } - - @Override - public void serialize(StandardCVPipelineSettings pipeline, JsonGenerator gen, SerializerProvider provider) throws IOException { - // set BaseSerializer generator reference. - generator = gen; - - gen.writeStartObject(); - - gen.writeNumberField("index", pipeline.index); - - writeEnum("flipMode", pipeline.flipMode); - writeEnum("rotationMode", pipeline.rotationMode); - - gen.writeStringField("nickname", pipeline.nickname); - - gen.writeNumberField("exposure", pipeline.exposure); - gen.writeNumberField("brightness", pipeline.brightness); - gen.writeNumberField("gain", pipeline.gain); - - gen.writeNumberField("videoModeIndex", pipeline.videoModeIndex); - - writeEnum("streamDivisor", pipeline.streamDivisor); - - writeNumberListAsNumberArray("hue", pipeline.hue); - writeNumberListAsNumberArray("saturation", pipeline.saturation); - writeNumberListAsNumberArray("value", pipeline.value); - - gen.writeBooleanField("erode", pipeline.erode); - gen.writeBooleanField("dilate", pipeline.dilate); - - writeNumberListAsNumberArray("area", pipeline.area); - writeNumberListAsNumberArray("ratio", pipeline.ratio); - writeNumberListAsNumberArray("extent", pipeline.extent); - - // speckle rejection - gen.writeNumberField("speckle", (Integer) pipeline.speckle); - - // stream output (camera feed, or thresholded feed) - gen.writeBooleanField("isBinary", pipeline.isBinary); - - writeEnum("sortMode", pipeline.sortMode); - writeEnum("targetRegion", pipeline.targetRegion); - writeEnum("targetOrientation", pipeline.targetOrientation); - - // show multiple targets when drawing - gen.writeBooleanField("multiple", pipeline.multiple); - - writeEnum("targetGroup", pipeline.targetGroup); - writeEnum("targetIntersection", pipeline.targetIntersection); - - // single calibration point - writeNumberListAsNumberArray("point", pipeline.point); - - // target X/Y calibration - writeEnum("calibrationMode", pipeline.calibrationMode); - - // TODO: better names? or use an array? - gen.writeNumberField("dualTargetCalibrationM", pipeline.dualTargetCalibrationM); - gen.writeNumberField("dualTargetCalibrationB", pipeline.dualTargetCalibrationB); - - - gen.writeBooleanField("is3D", pipeline.is3D); - writeMatOfPoint3f("targetCornerMat", pipeline.targetCornerMat); - gen.writeNumberField("accuracy", pipeline.accuracy.doubleValue()); - gen.writeEndObject(); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/NetmaskToCIDR.java b/chameleon-server/src/main/java/com/chameleonvision/network/NetmaskToCIDR.java deleted file mode 100644 index 84673605f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/network/NetmaskToCIDR.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.chameleonvision.network; - -import java.net.InetAddress; - -public class NetmaskToCIDR { - //code belongs to https://stackoverflow.com/questions/19531411/calculate-cidr-from-a-given-netmask-java - public static int convertNetmaskToCIDR(InetAddress netmask) { - - byte[] netmaskBytes = netmask.getAddress(); - int cidr = 0; - boolean zero = false; - for (byte b : netmaskBytes) { - int mask = 0x80; - - for (int i = 0; i < 8; i++) { - int result = b & mask; - if (result == 0) { - zero = true; - } else if (zero) { - throw new IllegalArgumentException("Invalid netmask."); - } else { - cidr++; - } - mask >>>= 1; - } - } - return cidr; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkIPMode.java b/chameleon-server/src/main/java/com/chameleonvision/network/NetworkIPMode.java deleted file mode 100644 index ec5a376d3..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkIPMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.chameleonvision.network; - -public enum NetworkIPMode { - DHCP, - STATIC, - UNKNOWN -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkManager.java b/chameleon-server/src/main/java/com/chameleonvision/network/NetworkManager.java deleted file mode 100644 index 60a99b8f1..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/network/NetworkManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.chameleonvision.network; - - -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.util.Platform; - -import java.net.SocketException; -import java.util.ArrayList; -import java.util.List; - -public class NetworkManager { - private NetworkManager() { - } - - private static SysNetworking networking; - private static boolean isManaged = false; - - public static void initialize(boolean manage) { - isManaged = manage; - if (!isManaged) { - return; - } - - Platform platform = Platform.CurrentPlatform; - - if (platform.isLinux()) { - networking = new LinuxNetworking(); - } else if (platform.isWindows()) { -// networking = new WindowsNetworking(); - System.out.println("Windows networking is not yet supported. Running unmanaged."); - return; - } - - if (networking == null) { - throw new RuntimeException("Failed to detect platform!"); - } - - List interfaces = new ArrayList<>(); - List goodInterfaces = new ArrayList<>(); - - try { - interfaces = networking.getNetworkInterfaces(); - } catch (SocketException e) { - e.printStackTrace(); - } - - var teamBytes = NetworkManager.GetTeamNumberIPBytes(ConfigManager.settings.teamNumber); - - if (interfaces.size() > 0) { - for (var inetface : interfaces) { - for (var inetfaceAddr : inetface.getInterfaceAddresses()) { - var rawAddr = inetfaceAddr.getAddress().getAddress(); - if (rawAddr.length > 4) continue; - if (rawAddr[1] == teamBytes[0] && rawAddr[2] == teamBytes[1]) { - goodInterfaces.add(new NetworkInterface(inetface, inetfaceAddr)); - } - } - } - - if (goodInterfaces.size() == 0) { - isManaged = false; - System.err.println("No valid network interfaces found! Staying unmanaged."); - return; - } - - NetworkInterface botInterface = goodInterfaces.get(0); - networking.setNetworkInterface(botInterface); - } else { - isManaged = false; - System.err.println("No valid network interfaces found! Staying unmanaged."); - } - } - - private static byte[] GetTeamNumberIPBytes(int teamNumber) { - return new byte[]{(byte) (teamNumber / 100), (byte) (teamNumber % 100)}; - } - - - private static boolean setDHCP() { - if (!isManaged) { - return true; - } - return networking.setDHCP(); - } - - private static boolean setStatic(String ipAddress, String netmask, String gateway) { - if (!isManaged) { - return true; - } - return networking.setStatic(ipAddress, netmask, gateway); - } - - public static boolean setHostname(String hostname) { - if (!isManaged) { - return true; - } - return networking.setHostname(hostname); - } - - public static boolean setNetwork(boolean isStatic, String ip, String netmask, String gateway) { - if (isStatic) { - return setStatic(ip, netmask, gateway); - } else { - return setDHCP(); - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/SysNetworking.java b/chameleon-server/src/main/java/com/chameleonvision/network/SysNetworking.java deleted file mode 100644 index 7073809fb..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/network/SysNetworking.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.chameleonvision.network; - -import com.chameleonvision.util.ShellExec; - -import java.io.IOException; -import java.net.SocketException; -import java.util.List; - -public abstract class SysNetworking { - - NetworkInterface networkInterface; - ShellExec shell = new ShellExec(true, true); - - public String getHostname() { - try { - var retCode = shell.execute("hostname", null, true); - if (retCode == 0) { - while(!shell.isOutputCompleted()) {} - return shell.getOutput(); - } else { - return null; - } - } catch (IOException e) { - return null; - } - } - - public void setNetworkInterface(NetworkInterface networkInterface) { - this.networkInterface = networkInterface; - } - public abstract boolean setDHCP(); - public abstract boolean setHostname(String hostname); - public abstract boolean setStatic(String ipAddress, String netmask, String gateway); - public abstract List getNetworkInterfaces() throws SocketException; - -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/network/WindowsNetworking.java b/chameleon-server/src/main/java/com/chameleonvision/network/WindowsNetworking.java deleted file mode 100644 index c6fdae74f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/network/WindowsNetworking.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.chameleonvision.network; - -import java.net.SocketException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class WindowsNetworking extends SysNetworking { - - @Override - public boolean setDHCP() { - return false; - } - - @Override - public boolean setHostname(String newHostname) { - var currentHostname = getHostname(); - - if (getHostname() == null) { - return false; - } - - String command = String.format("wmic computersystem where name=\"%s\" call rename name=\"%s\"", currentHostname, newHostname); - - try { - var process = Runtime.getRuntime().exec(command); - var returnCode = process.waitFor(); - return returnCode == 0; - } catch(Exception e) { - return false; - } - } - - @Override - public boolean setStatic(String ipAddress, String netmask, String gateway) { - return false; - } - - @Override - public List getNetworkInterfaces() throws SocketException { - var netInterfaces = Collections.list(java.net.NetworkInterface.getNetworkInterfaces()); - - List goodInterfaces = new ArrayList<>(); - - for (var netInterface : netInterfaces) { - if (netInterface.getDisplayName().toLowerCase().contains("bluetooth")) continue; - if (netInterface.getDisplayName().toLowerCase().contains("virtual")) continue; - if (netInterface.getDisplayName().toLowerCase().contains("loopback")) continue; - if (!netInterface.isUp()) continue; - goodInterfaces.add(netInterface); - } - return goodInterfaces; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/networktables/NetworkTablesManager.java b/chameleon-server/src/main/java/com/chameleonvision/networktables/NetworkTablesManager.java deleted file mode 100644 index aab2df65c..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/networktables/NetworkTablesManager.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.chameleonvision.networktables; - -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.scripting.ScriptEventType; -import com.chameleonvision.scripting.ScriptManager; -import edu.wpi.first.networktables.LogMessage; -import edu.wpi.first.networktables.NetworkTable; -import edu.wpi.first.networktables.NetworkTableInstance; - -import java.util.function.Consumer; - -public class NetworkTablesManager { - - private NetworkTablesManager() {} - - private static final NetworkTableInstance ntInstance = NetworkTableInstance.getDefault(); - - public static final String kRootTableName = "/chameleon-vision"; - public static final NetworkTable kRootTable = NetworkTableInstance.getDefault().getTable(kRootTableName); - - public static boolean isServer = false; - - private static int getTeamNumber() { - return ConfigManager.settings.teamNumber; - } - - private static class NTLogger implements Consumer { - - private boolean hasReportedConnectionFailure = false; - - @Override - public void accept(LogMessage logMessage) { - if (!hasReportedConnectionFailure && logMessage.message.contains("timed out")) { - System.err.println("NT Connection has failed! Will retry in background."); - hasReportedConnectionFailure = true; - } else if (logMessage.message.contains("connected")) { - System.out.println("NT Connected!"); - hasReportedConnectionFailure = false; - ScriptManager.queueEvent(ScriptEventType.kNTConnected); - } - } - } - - static { - NetworkTableInstance.getDefault().addLogger(new NTLogger(), 0, 255); // to hide error messages - } - - public static void setClientMode(String host) { - isServer = false; - System.out.println("Starting NT Client"); - ntInstance.stopServer(); - if (host != null) { - ntInstance.startClient(host); - } else { - ntInstance.startClientTeam(getTeamNumber()); - if(ntInstance.isConnected()) { - System.out.println("[NetworkTablesManager] Connected to the robot!"); - } else { - System.out.println("[NetworkTablesManager] Could NOT to the robot! Will retry in the background..."); - } - } - } - - public static void setTeamClientMode() { - setClientMode(null); - } - - public static void setServerMode() { - isServer = true; - System.out.println("Starting NT Server"); - ntInstance.stopClient(); - ntInstance.startServer(); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptCommandType.java b/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptCommandType.java deleted file mode 100644 index 017512065..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptCommandType.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.chameleonvision.scripting; - -public enum ScriptCommandType { - kDefault(""), - kBashScript("bash"), - kPythonScript("python"), - kPython3Script("python3"); - - public final String value; - - ScriptCommandType(String value) { - this.value = value; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptConfig.java b/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptConfig.java deleted file mode 100644 index 313397841..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.chameleonvision.scripting; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class ScriptConfig { - public final ScriptEventType eventType; - public final String command; - - public ScriptConfig(ScriptEventType eventType) { - this.eventType = eventType; - this.command = ""; - } - - @JsonCreator - public ScriptConfig( - @JsonProperty("eventType") ScriptEventType eventType, - @JsonProperty("command") String command - ) { - this.eventType = eventType; - this.command = command; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEvent.java b/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEvent.java deleted file mode 100644 index c2f987c5a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.chameleonvision.scripting; - -import com.chameleonvision.Debug; -import com.chameleonvision.util.ShellExec; - -import java.io.IOException; - -public class ScriptEvent { - private static final ShellExec executor = new ShellExec(true, true); - - public final ScriptConfig config; - - public ScriptEvent(ScriptConfig config) { - this.config = config; - } - - public int run() throws IOException { - int retVal = executor.executeBashCommand(config.command); - - String output = executor.getOutput(); - String error = executor.getError(); - - if (!error.isEmpty()) { - System.err.printf("Error when running \"%s\" script: %s\n", config.eventType.name(), error); - } else if (!output.isEmpty()) { - Debug.printInfo(String.format("Output from \"%s\" script: %s\n", config.eventType.name(), output)); - } - Debug.printInfo(String.format("Script for %s ran with command line: \"%s\", exit code: %d, output: %s, error: %s\n", config.eventType.name(), config.command, retVal, output, error)); - return retVal; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEventType.java b/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEventType.java deleted file mode 100644 index 436676ee3..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptEventType.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.chameleonvision.scripting; - -public enum ScriptEventType { - kProgramInit("Program Init"), - kProgramExit("Program Exit"), - kNTConnected("NT Connected"), - kLEDOn("LED On"), - kLEDOff("LED Off"), - kEnterDriverMode("Enter Driver Mode"), - kExitDriverMode("Exit Driver Mode"), - kFoundTarget("Found Target"), - kFoundMultipleTarget("Found Multiple Target"), - kLostTarget("Lost Target"), - kPipelineLag("Pipeline Lag"); - - public final String value; - - ScriptEventType(String value) { - this.value = value; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptManager.java b/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptManager.java deleted file mode 100644 index 0e2633658..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/scripting/ScriptManager.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.chameleonvision.scripting; - -import com.chameleonvision.Debug; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.util.JacksonHelper; -import com.chameleonvision.util.LoopingRunnable; -import com.chameleonvision.util.Platform; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.LinkedBlockingDeque; - -public class ScriptManager { - - private ScriptManager() { - } - - private static final List events = new ArrayList<>(); - private static final LinkedBlockingDeque queuedEvents = new LinkedBlockingDeque<>(25); - - public static void initialize() { - ScriptConfigManager.initialize(); - if (ScriptConfigManager.fileExists()) { - for (ScriptConfig scriptConfig : ScriptConfigManager.loadConfig()) { - ScriptEvent scriptEvent = new ScriptEvent(scriptConfig); - events.add(scriptEvent); - } - - new Thread(new ScriptRunner(10L)).start(); - } else { - System.err.println("Something went wrong initializing scripts! Events will not run."); - } - } - - private static class ScriptRunner extends LoopingRunnable { - - ScriptRunner(Long loopTimeMs) { - super(loopTimeMs); - } - - @Override - protected void process() { - try { - - handleEvent(queuedEvents.takeFirst()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - private void handleEvent(ScriptEventType eventType) { - var toRun = events.parallelStream().filter(e -> e.config.eventType == eventType).findFirst().orElse(null); - if (toRun != null) { - try { - toRun.run(); - } catch (IOException e) { - System.err.printf("Failed to run script for event: %s, exception below.\n%s\n", eventType.name(), e.getMessage()); - } - } - } - } - - protected static class ScriptConfigManager { - - protected static final Path scriptConfigPath = Paths.get(ConfigManager.SettingsPath.toString(), "scripts.json"); - - private ScriptConfigManager() { - } - - static boolean fileExists() { - return Files.exists(scriptConfigPath); - } - - public static void initialize() { - if (!fileExists()) { - List eventsConfig = new ArrayList<>(); - for (var eventType : ScriptEventType.values()) { - eventsConfig.add(new ScriptConfig(eventType)); - } - - try { - JacksonHelper.serializer(scriptConfigPath, eventsConfig.toArray(new ScriptConfig[0]), true); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - static List loadConfig() { - try { - var raw = JacksonHelper.deserialize(scriptConfigPath, ScriptConfig[].class); - if (raw != null) { - return List.of(raw); - } - } catch (IOException e) { - e.printStackTrace(); - } - return new ArrayList<>(); - } - - protected static void deleteConfig() { - try { - Files.delete(scriptConfigPath); - } catch (IOException e) { - // - } - } - } - - public static void queueEvent(ScriptEventType eventType) { - if (!Platform.getCurrentPlatform().isWindows()) { - try { - queuedEvents.putLast(eventType); - Debug.printInfo("Queued event: " + eventType.name()); - } catch (InterruptedException e) { - System.err.println("Failed to add event to queue: " + eventType.name()); - } - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/server/Main.java b/chameleon-server/src/main/java/com/chameleonvision/server/Main.java new file mode 100644 index 000000000..db2fab704 --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/server/Main.java @@ -0,0 +1,4 @@ +package com.chameleonvision.server; + +public class Main { +} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/FileHelper.java b/chameleon-server/src/main/java/com/chameleonvision/util/FileHelper.java deleted file mode 100644 index 04d97fc2c..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/FileHelper.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.chameleonvision.util; - -import com.chameleonvision.Debug; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFileAttributes; -import java.nio.file.attribute.PosixFilePermission; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -public class FileHelper { - private FileHelper() {} - - private static final Set allReadWriteExecutePerms = new HashSet<>(Arrays.asList(PosixFilePermission.values())); - - public static void setFilePerms(Path path) throws IOException { - if (!Platform.CurrentPlatform.isWindows()) { - File thisFile = path.toFile(); - Set perms = Files.readAttributes(path, PosixFileAttributes.class).permissions(); - if (!perms.equals(allReadWriteExecutePerms)) { - Debug.printInfo("Setting perms on" + path.toString()); - Files.setPosixFilePermissions(path, perms); - if (thisFile.isDirectory()) { - for (File subfile : thisFile.listFiles()) { - setFilePerms(subfile.toPath()); - } - } - } - } - } - - public static void setAllPerms(Path path) { - if (!Platform.CurrentPlatform.isWindows()) { - String command = String.format("chmod 777 -R %s", path.toString()); - try { - Process p = Runtime.getRuntime().exec(command); - p.waitFor(); - - } catch (Exception e) { - e.printStackTrace(); - } - } else { - // TODO file perms on Windows - System.out.println("File permission setting not available on Windows. Not changing file permissions."); - } - - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/Helpers.java b/chameleon-server/src/main/java/com/chameleonvision/util/Helpers.java deleted file mode 100644 index a4de4acce..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/Helpers.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.chameleonvision.util; - -import edu.wpi.cscore.VideoMode; -import org.opencv.core.Scalar; - -import java.awt.*; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.nio.file.Path; -import java.util.HashMap; - -public class Helpers { - private static final String kServicePath = "/etc/systemd/system/chameleonVision.service"; - private static final String kServiceString = "[Unit]\n" + - "Description=chameleon vision\n" + - "\n" + - "[Service]\n" + - "ExecStart=/usr/bin/java -jar %s \n" + - "StandardOutput=file:/var/log/chameleon.out.txt\n" + - "StandardError=file:/var/log/chameleon.err.txt\n" + - "Type=simple\n" + - "WorkingDirectory=/usr/local/bin\n" + - "\n" + - "[Install]\n" + - "WantedBy=multi-user.target\n" + - "\n"; - - - - private Helpers() { - } - - public static Scalar colorToScalar(Color color) { - return new Scalar(color.getBlue(), color.getGreen(), color.getRed()); - } - - public static HashMap VideoModeToHashMap(VideoMode videoMode) { - return new HashMap() {{ - put("width", videoMode.width); - put("height", videoMode.height); - put("fps", videoMode.fps); - put("pixelFormat", videoMode.pixelFormat.toString()); - }}; - } - - public static void setService(Path filePath) throws IOException, InterruptedException { - String newService = String.format(kServiceString, filePath.toString()); - File file = new File(kServicePath); - if (file.exists()) { - file.delete(); - } - Writer writer = new FileWriter(file, false); - writer.write(newService); - writer.close(); - Process p = Runtime.getRuntime().exec("systemctl enable chameleonVision.service"); - p.waitFor(); - } - -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/JacksonHelper.java b/chameleon-server/src/main/java/com/chameleonvision/util/JacksonHelper.java deleted file mode 100644 index da45fdaa9..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/JacksonHelper.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.chameleonvision.util; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; -import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -import java.io.File; -import java.io.FileDescriptor; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.file.Path; - -public class JacksonHelper { - private JacksonHelper() { - } // no construction, utility class - - public static void serializer(Path path, T object) throws IOException { - serializer(path, object, false); - } - - public static void serializer(Path path, T object, boolean forceSync) throws IOException { - PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().allowIfBaseType(object.getClass()).build(); - ObjectMapper objectMapper = JsonMapper.builder().activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT).build(); - String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); - saveJsonString(json, path, forceSync); - } - - public static T deserialize(Path path, Class ref) throws IOException { - PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().allowIfBaseType(ref).build(); - ObjectMapper objectMapper = JsonMapper.builder().activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT).build(); - File jsonFile = new File(path.toString()); - if (jsonFile.exists() && jsonFile.length() > 0) { - return objectMapper.readValue(jsonFile, ref); - } - return null; - } - - public static T deserialize(Path path, Class ref, StdDeserializer deserializer) throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - SimpleModule module = new SimpleModule(); - module.addDeserializer(ref, deserializer); - objectMapper.registerModule(module); - - File jsonFile = new File(path.toString()); - if (jsonFile.exists() && jsonFile.length() > 0) { - return objectMapper.readValue(jsonFile, ref); - } - return null; - } - public static void serialize(Path path, T object, Class ref, StdSerializer serializer) throws IOException { - serialize(path, object, ref, serializer, false); - } - - public static void serialize(Path path, T object, Class ref, StdSerializer serializer, boolean forceSync) throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - SimpleModule module = new SimpleModule(); - module.addSerializer(ref, serializer); - objectMapper.registerModule(module); - String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); - saveJsonString(json, path, forceSync); - } - - private static void saveJsonString(String json, Path path, boolean forceSync) throws IOException { - FileOutputStream fileOutputStream = new FileOutputStream(path.toFile()); - fileOutputStream.write(json.getBytes()); - fileOutputStream.flush(); - if (forceSync) { - FileDescriptor fileDescriptor = fileOutputStream.getFD(); - fileDescriptor.sync(); - } - fileOutputStream.close(); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/LoopingRunnable.java b/chameleon-server/src/main/java/com/chameleonvision/util/LoopingRunnable.java deleted file mode 100644 index 555063956..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/LoopingRunnable.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.chameleonvision.util; - -/** - * A thread that tries to run at a specified loop time - */ -public abstract class LoopingRunnable implements Runnable { - protected volatile Long loopTimeMs; - - protected abstract void process(); - - public LoopingRunnable(Long loopTimeMs) { - this.loopTimeMs = loopTimeMs; - } - - @Override - public void run() { - while(!Thread.interrupted()) { - var now = System.currentTimeMillis(); - - // Do the thing - process(); - - // sleep for the remaining time - var timeElapsed = System.currentTimeMillis() - now; - var delta = loopTimeMs - timeElapsed; - try { - if(delta > 0.0) { - - Thread.sleep(delta, 0); - - } else { - Thread.sleep(1); - } - } catch (Exception ignored) {} - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/MathHandler.java b/chameleon-server/src/main/java/com/chameleonvision/util/MathHandler.java deleted file mode 100644 index bf4433889..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/MathHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.chameleonvision.util; - -import org.apache.commons.math3.util.FastMath; - -public class MathHandler { - MathHandler() {} - - public static double sigmoid(Number x){ - double bias = 0; - double a = 5; - double b = -0.05; - double k = 200; - - if (x.doubleValue() < 50){ - bias = -1.338; - } - - return ((k / (1 + Math.pow(Math.E,(a + (b * x.doubleValue()))))) + bias); - } - - public static double toSlope(Number angle){ - return FastMath.atan(FastMath.toRadians(angle.doubleValue() - 90)); - } - - public static double roundTo(double value, int to) { - double toMult = Math.pow(10, to); - return (double)Math.round(value * toMult) / toMult; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/MemoryManager.java b/chameleon-server/src/main/java/com/chameleonvision/util/MemoryManager.java deleted file mode 100644 index b48cc20ad..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/MemoryManager.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.chameleonvision.util; - -public class MemoryManager { - - private static final long MEGABYTE_FACTOR = 1024L * 1024L; - - private int collectionThreshold; - private long collectionPeriodMillis = -1; - - private double lastUsedMb = 0; - private long lastCollectionMillis = 0; - - public MemoryManager(int collectionThreshold) { - this.collectionThreshold = collectionThreshold; - } - - public MemoryManager(int collectionThreshold, long collectionPeriodMillis) { - this.collectionThreshold = collectionThreshold; - this.collectionPeriodMillis = collectionPeriodMillis; - } - - public void setCollectionThreshold(int collectionThreshold) { - this.collectionThreshold = collectionThreshold; - } - - public void setCollectionPeriodMillis(long collectionPeriodMillis) { - this.collectionPeriodMillis = collectionPeriodMillis; - } - - private static long getUsedMemory() { - return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); - } - - private static double getUsedMemoryMB() { - return ((double) getUsedMemory() / MEGABYTE_FACTOR); - } - - private void collect() { - System.gc(); - System.runFinalization(); - } - - public void run() { - run(false); - } - - public void run(boolean print) { - var usedMem = getUsedMemoryMB(); - - if (usedMem != lastUsedMb) { - lastUsedMb = usedMem; - if (print) System.out.printf("Memory usage: %.2fMB\n", usedMem); - } - - boolean collectionThresholdPassed = usedMem >= collectionThreshold; - boolean collectionPeriodPassed = collectionPeriodMillis != -1 && (System.currentTimeMillis() - lastCollectionMillis >= collectionPeriodMillis); - - if (collectionThresholdPassed || collectionPeriodPassed) { - collect(); - lastCollectionMillis = System.currentTimeMillis(); - if (print) { - System.out.printf("Garbage collected at %.2fMB\n", usedMem); - } - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/Platform.java b/chameleon-server/src/main/java/com/chameleonvision/util/Platform.java deleted file mode 100644 index 203880e98..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/Platform.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.chameleonvision.util; - -import java.io.BufferedReader; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; - -public enum Platform { - WINDOWS_64("Windows x64"), - LINUX_64("Linux x64"), - LINUX_RASPBIAN("Linux Raspbian"), - LINUX_ARM64("Linux ARM64"), - MACOS_64("Mac OS x64"), - UNSUPPORTED("Unsupported Platform"); - - public final String value; - - Platform(String value) { - this.value = value; - } - - private static final String OS_NAME = System.getProperty("os.name"); - private static final String OS_ARCH = System.getProperty("os.arch"); - public static final Platform CurrentPlatform = getCurrentPlatform(); - - public boolean isWindows() { - return this == WINDOWS_64; - } - - public boolean isLinux() { - return this == LINUX_64 || this == LINUX_RASPBIAN || this == LINUX_ARM64; - } - - public boolean isMac() { - return this == MACOS_64; - } - - public static boolean isRaspberryPi() { - return CurrentPlatform.equals(LINUX_RASPBIAN); - } - - private static ShellExec shell = new ShellExec(true, false); - - public boolean isRoot() { - if (isLinux() || isMac()) { - try { - shell.execute("id", null, true, "-u"); - } catch (IOException e) { - e.printStackTrace(); - } - while (!shell.isOutputCompleted()) { - // ignored - } - if (shell.getExitCode() == 0) { - var out = shell.getOutput(); - out = out.split("\n")[0]; - return out.equals("0"); - } - } else if (isWindows()) { - return true; - } else { - return true; - } - return false; - } - - private static boolean isRaspbian() { - try (BufferedReader reader = Files.newBufferedReader(Paths.get("/etc/os-release"))) { - String value = reader.readLine(); - return value.contains("Raspbian"); - } catch (IOException ex) { - return false; - } - } - - public static Platform getCurrentPlatform() { - if (OS_NAME.contains("Windows")) { - if (OS_ARCH.equals("amd64")) return Platform.WINDOWS_64; - } - - if (OS_NAME.contains("Linux")) { - if (OS_ARCH.equals("amd64")) return Platform.LINUX_64; - if (isRaspbian()) return Platform.LINUX_RASPBIAN; - if (OS_ARCH.contains("aarch")) return Platform.LINUX_ARM64; - } - - if (OS_NAME.contains("Mac")) { - if (OS_ARCH.equals("amd64")) return Platform.MACOS_64; - } - - System.out.printf("Unknown Platform! OS: %s, Architecture: %s", OS_NAME, OS_ARCH); - return Platform.UNSUPPORTED; - } - - public String toString() { - if (this.equals(UNSUPPORTED)) { - return String.format("Unknown Platform. OS: %s, Architecture: %s", OS_NAME, OS_ARCH); - } else { - return this.value; - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/ProgramDirectoryUtilities.java b/chameleon-server/src/main/java/com/chameleonvision/util/ProgramDirectoryUtilities.java deleted file mode 100644 index 189547406..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/ProgramDirectoryUtilities.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.chameleonvision.util; - -import java.io.File; -import java.net.URISyntaxException; - -public class ProgramDirectoryUtilities { - private static String getJarName() { - return new File(ProgramDirectoryUtilities.class.getProtectionDomain() - .getCodeSource() - .getLocation() - .getPath()) - .getName(); - } - - private static boolean runningFromJAR() { - String jarName = getJarName(); - return jarName.contains(".jar"); - } - - public static String getProgramDirectory() { - if (runningFromJAR()) { - return getCurrentJARDirectory(); - } else { - return System.getProperty("user.dir"); - } - } - - private static String getCurrentJARDirectory() { - try { - return new File(ProgramDirectoryUtilities.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParent(); - } catch (URISyntaxException exception) { - exception.printStackTrace(); - } - - return null; - } -} \ No newline at end of file diff --git a/chameleon-server/src/main/java/com/chameleonvision/util/Utilities.java b/chameleon-server/src/main/java/com/chameleonvision/util/Utilities.java deleted file mode 100644 index 0be21374e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/util/Utilities.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.chameleonvision.util; - -import java.util.ArrayList; -import java.util.List; - -public class Utilities { - private Utilities() {} - - public static boolean isValidIPV4(final String ip) { - String PATTERN = "^((0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)\\.){3}(0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)$"; - - return ip.matches(PATTERN); - } - - public static List getDigitBytes(int num) { - List digits = new ArrayList<>(); - collectDigitBytes(num, digits); - return digits; - } - - private static void collectDigitBytes(int num, List digits) { - if (num / 10 > 0) { - collectDigitBytes( num / 10, digits); - } - digits.add((byte) (num % 10)); - } - - public static List getDigits(int num) { - List digits = new ArrayList<>(); - collectDigits(num, digits); - return digits; - } - - private static void collectDigits(int num, List digits) { - if(num / 10 > 0) { - collectDigits(num / 10, digits); - } - digits.add(num % 10); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionManager.java b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionManager.java deleted file mode 100644 index b37c58b0f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionManager.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.chameleonvision.vision; - -import com.chameleonvision.config.CameraConfig; -import com.chameleonvision.config.CameraJsonConfig; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.config.FullCameraConfiguration; -import com.chameleonvision.util.Helpers; -import com.chameleonvision.util.Platform; -import com.chameleonvision.vision.camera.USBCameraCapture; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; -import edu.wpi.cscore.UsbCamera; -import edu.wpi.cscore.UsbCameraInfo; -import org.opencv.videoio.VideoCapture; - -import java.util.*; -import java.util.stream.Collectors; - -@SuppressWarnings("rawtypes") -public class VisionManager { - private VisionManager() {} - - private static final LinkedHashMap usbCameraInfosByCameraName = new LinkedHashMap<>(); - private static final LinkedList loadedCameraConfigs = new LinkedList<>(); - private static final LinkedList visionProcesses = new LinkedList<>(); - - @SuppressWarnings("WeakerAccess") - private static class VisionProcessManageable { - public final int index; - public final String name; - public final VisionProcess visionProcess; - - public VisionProcessManageable(int index, String name, VisionProcess visionProcess) { - this.index = index; - this.name = name; - this.visionProcess = visionProcess; - } - } - - private static VisionProcess currentUIVisionProcess; - - public static boolean initializeSources() { - int suffix = 0; - for (UsbCameraInfo info : UsbCamera.enumerateUsbCameras()) { - VideoCapture cap = new VideoCapture(info.dev); - if (cap.isOpened()) { - cap.release(); - // Filter non-ascii characters because ext4 doesn't play nice with unicode in directory names - String name = info.name.replaceAll("[^\\x00-\\x7F]", ""); - while (usbCameraInfosByCameraName.containsKey(name)) { - suffix++; - name = String.format("%s (%d)", name, suffix); - } - usbCameraInfosByCameraName.put(name, info); - } - } - - if (usbCameraInfosByCameraName.isEmpty()) { - return false; - } - System.out.printf("[VisionManager] Found %s cameras!\n", usbCameraInfosByCameraName.size()); - - // load the config - List preliminaryConfigs = new ArrayList<>(); - - usbCameraInfosByCameraName.forEach((suffixedName, cameraInfo) -> { - String truePath; - - if (Platform.CurrentPlatform.isWindows()) { - truePath = cameraInfo.path; - } else { - truePath = Arrays.stream(cameraInfo.otherPaths).filter(x -> x.contains("/dev/v4l/by-path")).findFirst().orElse(cameraInfo.path); - } - - preliminaryConfigs.add(new CameraJsonConfig(truePath, suffixedName)); - }); - - loadedCameraConfigs.addAll(ConfigManager.initializeCameras(preliminaryConfigs)); - System.out.printf("[VisionManager] Loaded %s cameras!\n", loadedCameraConfigs.size()); - return true; - } - - public static boolean initializeProcesses() { - for (int i = 0; i < loadedCameraConfigs.size(); i++) { - FullCameraConfiguration config = loadedCameraConfigs.get(i); - - CameraJsonConfig cameraJsonConfig = config.cameraConfig; - - USBCameraCapture camera = new USBCameraCapture(config); - VisionProcess process = new VisionProcess(camera, config); - process.pipelineManager.driverModePipeline.settings = config.driverMode; - visionProcesses.add(new VisionProcessManageable(i, cameraJsonConfig.name, process)); - } - currentUIVisionProcess = getVisionProcessByIndex(0); - ConfigManager.settings.currentCamera = visionProcesses.get(0).name; - - System.out.printf("[VisionManager] Loaded %s vision processes! Current process: %s\n", visionProcesses.size(), visionProcesses.get(0).name); - return true; - } - - public static void startProcesses() { - visionProcesses.forEach((vpm) -> vpm.visionProcess.start()); - } - - public static VisionProcess getCurrentUIVisionProcess() { - return currentUIVisionProcess; - } - - public static CameraConfig getCurrentCameraConfig() { - return getCameraConfig(currentUIVisionProcess); - } - - public static CameraConfig getCameraConfig(VisionProcess process) { - String cameraName = process.getCamera().getProperties().name; - return Objects.requireNonNull(loadedCameraConfigs.stream().filter(x -> x.cameraConfig.name.equals(cameraName)).findFirst().orElse(null)).fileConfig; - } - - public static void setCurrentProcessByIndex(int processIndex) { - if (processIndex > visionProcesses.size() - 1) { - return; - } - - currentUIVisionProcess = getVisionProcessByIndex(processIndex); - ConfigManager.settings.currentCamera = visionProcesses.get(processIndex).name; - } - - public static VisionProcess getVisionProcessByIndex(int processIndex) { - if (processIndex > visionProcesses.size() - 1) { - return null; - } - - VisionProcessManageable vpm = visionProcesses.stream().filter(manageable -> manageable.index == processIndex).findFirst().orElse(null); - return vpm != null ? vpm.visionProcess : null; - } - - public static List getAllCameraNicknames() { - return visionProcesses.stream().map(vpm -> vpm.visionProcess.getCamera() - .getProperties().getNickname()).collect(Collectors.toList()); - } - - public static List getCurrentCameraPipelineNicknames() { - return currentUIVisionProcess.pipelineManager.pipelines.stream().map(cvPipeline -> cvPipeline.settings.nickname).collect(Collectors.toList()); - } - - - public static void saveAllCameras() { - visionProcesses.forEach((vpm) -> { - VisionProcess process = vpm.visionProcess; - String cameraName = process.getCamera().getProperties().name; - List pipelines = process.pipelineManager.pipelines.stream().map(cvPipeline -> cvPipeline.settings).collect(Collectors.toList()); - CVPipelineSettings driverMode = process.getDriverModeSettings(); - CameraJsonConfig config = CameraJsonConfig.fromVisionProcess(process); - ConfigManager.saveCameraPipelines(cameraName, pipelines); - ConfigManager.saveCameraDriverMode(cameraName, driverMode); - ConfigManager.saveCameraConfig(cameraName, config); - }); - } - - private static String getCurrentCameraName() { - return currentUIVisionProcess.getCamera().getProperties().name; - } - - public static void saveCurrentCameraSettings() { - CameraJsonConfig config = CameraJsonConfig.fromVisionProcess(currentUIVisionProcess); - ConfigManager.saveCameraConfig(getCurrentCameraName(), config); - } - - public static void saveCurrentCameraPipelines() { - currentUIVisionProcess.pipelineManager.saveAllPipelines(); - } - - public static void saveCurrentCameraDriverMode() { - currentUIVisionProcess.pipelineManager.saveDriverModeConfig(); - } - - private static List getCameraResolutionList(USBCameraCapture capture) { - return capture.getProperties().getVideoModes().stream().map(Helpers::VideoModeToHashMap).collect(Collectors.toList()); - } - - public static List getCurrentCameraResolutionList() { - return getCameraResolutionList(currentUIVisionProcess.getCamera()); - } - - public static int getCurrentUIVisionProcessIndex() { - VisionProcessManageable vpm = visionProcesses.stream().filter(v -> v.visionProcess == currentUIVisionProcess).findFirst().orElse(null); - return vpm != null ? vpm.index : -1; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java deleted file mode 100644 index bb0e474e7..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ /dev/null @@ -1,389 +0,0 @@ -package com.chameleonvision.vision; - -import com.chameleonvision.Debug; -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.config.CameraConfig; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.config.FullCameraConfiguration; -import com.chameleonvision.networktables.NetworkTablesManager; -import com.chameleonvision.scripting.ScriptEventType; -import com.chameleonvision.scripting.ScriptManager; -import com.chameleonvision.util.MathHandler; -import com.chameleonvision.vision.camera.CameraStreamer; -import com.chameleonvision.vision.camera.USBCameraCapture; -import com.chameleonvision.vision.pipeline.CVPipelineResult; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; -import com.chameleonvision.vision.pipeline.PipelineManager; -import com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import com.chameleonvision.web.SocketHandler; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.networktables.*; -import edu.wpi.first.wpilibj.geometry.Pose2d; -import edu.wpi.first.wpiutil.CircularBuffer; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.stream.Collectors; - - -@SuppressWarnings("rawtypes") -public class VisionProcess { - - public final USBCameraCapture cameraCapture; - private final VisionProcessRunnable visionRunnable; - private final CameraConfig fileConfig; - public final CameraStreamer cameraStreamer; - public PipelineManager pipelineManager; - - private volatile CVPipelineResult lastPipelineResult; - - // network table stuff - private final NetworkTable defaultTable; - private NetworkTableInstance tableInstance; - private NetworkTableEntry ntPipelineEntry; - public NetworkTableEntry ntDriverModeEntry; - private int ntDriveModeListenerID; - private int ntPipelineListenerID; - private NetworkTableEntry ntYawEntry; - private NetworkTableEntry ntPitchEntry; - private NetworkTableEntry ntAuxListEntry; - private NetworkTableEntry ntAreaEntry; - private NetworkTableEntry ntLatencyEntry; - private NetworkTableEntry ntValidEntry; - private NetworkTableEntry ntPoseEntry; - private NetworkTableEntry ntFittedHeightEntry; - private NetworkTableEntry ntFittedWidthEntry; - private NetworkTableEntry ntBoundingHeightEntry; - private NetworkTableEntry ntBoundingWidthEntry; - private NetworkTableEntry ntTargetRotation; - - private ObjectMapper objectMapper = new ObjectMapper(); - - private long lastUIUpdateMs = 0; - - VisionProcess(USBCameraCapture cameraCapture, FullCameraConfiguration config) { - this.cameraCapture = cameraCapture; - - fileConfig = config.fileConfig; - - pipelineManager = new PipelineManager(this, config.pipelines); - - // Thread to put frames on the dashboard - this.cameraStreamer = new CameraStreamer(cameraCapture, config.cameraConfig.name, pipelineManager.getCurrentPipeline().settings.streamDivisor); - - // Thread to process vision data - this.visionRunnable = new VisionProcessRunnable(); - - // network table - defaultTable = NetworkTableInstance.getDefault().getTable("/chameleon-vision/" + cameraCapture.getProperties().getNickname()); - } - - public void start() { - System.out.printf("[%s Process] Creating network table...\n", getCamera().getProperties().getNickname()); - initNT(defaultTable); - - System.out.printf("[%s Process] Starting vision thread...\n", getCamera().getProperties().getNickname()); - var visionThread = new Thread(visionRunnable); - visionThread.setName(getCamera().getProperties().name + " - Vision Thread"); - visionThread.start(); - } - - /** - * Removes the old value change listeners - * calls {@link #initNT} - * - * @param newTable passed to {@link #initNT} - */ - public void resetNT(NetworkTable newTable) { - ntDriverModeEntry.removeListener(ntDriveModeListenerID); - ntPipelineEntry.removeListener(ntPipelineListenerID); - initNT(newTable); - } - - public void setCameraNickname(String newName) { - getCamera().getProperties().setNickname(newName); - NetworkTable camTable = NetworkTablesManager.kRootTable.getSubTable(newName); - resetNT(camTable); - } - - private void initNT(NetworkTable camTable) { - tableInstance = camTable.getInstance(); - ntPipelineEntry = camTable.getEntry("pipeline"); - ntDriverModeEntry = camTable.getEntry("driverMode"); - ntPitchEntry = camTable.getEntry("targetPitch"); - ntYawEntry = camTable.getEntry("targetYaw"); - ntAreaEntry = camTable.getEntry("targetArea"); - ntLatencyEntry = camTable.getEntry("latency"); - ntValidEntry = camTable.getEntry("isValid"); - ntAuxListEntry = camTable.getEntry("auxTargets"); - ntPoseEntry = camTable.getEntry("targetPose"); - ntFittedHeightEntry = camTable.getEntry("targetFittedHeight"); - ntFittedWidthEntry = camTable.getEntry("targetFittedWidth"); - ntBoundingHeightEntry = camTable.getEntry("targetBoundingHeight"); - ntBoundingWidthEntry = camTable.getEntry("targetBoundingWidth"); - ntTargetRotation = camTable.getEntry("targetRotation"); - ntDriveModeListenerID = ntDriverModeEntry.addListener(this::setDriverMode, EntryListenerFlags.kUpdate); - ntPipelineListenerID = ntPipelineEntry.addListener(this::setPipeline, EntryListenerFlags.kUpdate); - ntDriverModeEntry.setBoolean(false); - ntPipelineEntry.setNumber(pipelineManager.getCurrentPipelineIndex()); - pipelineManager.ntIndexEntry = ntPipelineEntry; - } - - private void setDriverMode(EntryNotification driverModeEntryNotification) { - setDriverMode(driverModeEntryNotification.value.getBoolean()); - } - - public void setDriverMode(boolean driverMode) { - pipelineManager.setDriverMode(driverMode); - ScriptManager.queueEvent(driverMode ? ScriptEventType.kEnterDriverMode : ScriptEventType.kExitDriverMode); - SocketHandler.sendFullSettings(); - } - - /** - * Method called by the nt entry listener to update the next pipeline. - * - * @param notification the notification - */ - private void setPipeline(EntryNotification notification) { - var wantedPipelineIndex = (int) notification.value.getDouble(); - if (pipelineManager.pipelines.size() - 1 < wantedPipelineIndex) { - ntPipelineEntry.setDouble(pipelineManager.getCurrentPipelineIndex()); - } else { - pipelineManager.setCurrentPipeline(wantedPipelineIndex); - } - } - - public void setDriverModeEntry(boolean isDriverMode) { - // if it's null, we haven't even started the program yet, so just return - // otherwise, set it. - if (ntDriverModeEntry != null) { - ntDriverModeEntry.setBoolean(isDriverMode); - } - } - - private void updateUI(CVPipelineResult data) { - // 30 "FPS" update rate - long currentMillis = System.currentTimeMillis(); - if (currentMillis - lastUIUpdateMs > 1000 / 30) { - lastUIUpdateMs = currentMillis; - - - if (cameraCapture.getProperties().name.equals(ConfigManager.settings.currentCamera)) { - HashMap WebSend = new HashMap<>(); - HashMap point = new HashMap<>(); - HashMap pointMap = new HashMap<>(); - ArrayList webTargets = new ArrayList<>(); - List center = new ArrayList<>(); - - - if (data.hasTarget) { - if (data instanceof StandardCVPipeline.StandardCVPipelineResult) { - StandardCVPipeline.StandardCVPipelineResult result = (StandardCVPipeline.StandardCVPipelineResult) data; - StandardCVPipeline.TrackedTarget bestTarget = result.targets.get(0); - try { - if (((StandardCVPipelineSettings) pipelineManager.getCurrentPipeline().settings).multiple) { - for (var target : result.targets) { - pointMap = new HashMap<>(); - pointMap.put("pitch", target.pitch); - pointMap.put("yaw", target.yaw); - pointMap.put("area", target.area); - pointMap.put("pose", target.cameraRelativePose); - webTargets.add(pointMap); - } - } else { - pointMap.put("pitch", bestTarget.pitch); - pointMap.put("yaw", bestTarget.yaw); - pointMap.put("area", bestTarget.area); - pointMap.put("pose", bestTarget.cameraRelativePose); - webTargets.add(pointMap); - } - center.add(bestTarget.minAreaRect.center.x); - center.add(bestTarget.minAreaRect.center.y); - } catch (ClassCastException ignored) { - - } - } else { - pointMap.put("pitch", null); - pointMap.put("yaw", null); - pointMap.put("area", null); - pointMap.put("pose", new Pose2d()); - webTargets.add(pointMap); - center.add(null); - center.add(null); - } - - point.put("fps", visionRunnable.fps); - point.put("targets", webTargets); - point.put("rawPoint", center); - } else { - point.put("fps", visionRunnable.fps); - } - WebSend.put("point", point); - SocketHandler.broadcastMessage(WebSend); - } - } - } - - private void updateNetworkTableData(CVPipelineResult data) { - ntValidEntry.setBoolean(data.hasTarget); - if (data.hasTarget && !(data instanceof DriverVisionPipeline.DriverPipelineResult)) { - if (data instanceof StandardCVPipeline.StandardCVPipelineResult) { - - //noinspection unchecked - List targets = (List) data.targets; - StandardCVPipeline.TrackedTarget bestTarget = targets.get(0); - ntLatencyEntry.setDouble(MathHandler.roundTo(data.processTime * 1e-6, 3)); - ntPitchEntry.setDouble(bestTarget.pitch); - ntYawEntry.setDouble(bestTarget.yaw); - ntAreaEntry.setDouble(bestTarget.area); - ntBoundingHeightEntry.setDouble(bestTarget.boundingRect.height); - ntBoundingWidthEntry.setDouble(bestTarget.boundingRect.width); - ntFittedHeightEntry.setDouble(bestTarget.minAreaRect.size.height); - ntFittedWidthEntry.setDouble(bestTarget.minAreaRect.size.width); - ntTargetRotation.setDouble(bestTarget.minAreaRect.angle); - try { - Pose2d targetPose = targets.get(0).cameraRelativePose; - double[] targetArray = {targetPose.getTranslation().getX(), targetPose.getTranslation().getY(), targetPose.getRotation().getDegrees()}; - ntPoseEntry.setDoubleArray(targetArray); -// ntPoseEntry.setString(objectMapper.writeValueAsString(targets.get(0).cameraRelativePose)); - ntAuxListEntry.setString(objectMapper.writeValueAsString(targets.stream() - .map(it -> List.of(it.pitch, it.yaw, it.area, it.boundingRect.width, it.boundingRect.height, it.minAreaRect.size.width, it.minAreaRect.size.height, it.minAreaRect.angle, it.cameraRelativePose)) - .collect(Collectors.toList()))); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } else { - ntPitchEntry.setDouble(0.0); - ntYawEntry.setDouble(0.0); - ntAreaEntry.setDouble(0.0); - ntLatencyEntry.setDouble(0.0); - ntAuxListEntry.setString(""); - } - } - tableInstance.flush(); - } - - public void setVideoMode(VideoMode newMode) { - cameraCapture.setVideoMode(newMode); - cameraStreamer.setNewVideoMode(newMode); - } - - public VideoMode getCurrentVideoMode() { - return cameraCapture.getCurrentVideoMode(); - } - - public List getPossibleVideoModes() { - return cameraCapture.getProperties().videoModes; - } - - public USBCameraCapture getCamera() { - return cameraCapture; - } - - public CVPipelineSettings getDriverModeSettings() { - return pipelineManager.driverModePipeline.settings; - } - - public void addCalibration(CameraCalibrationConfig cal) { - cameraCapture.addCalibrationData(cal); - System.out.println("saving to file"); - fileConfig.saveCalibration(cameraCapture.getAllCalibrationData()); - } - - public void setIs3d(Boolean value) { - var settings = pipelineManager.getCurrentPipeline().settings; - if (settings instanceof StandardCVPipelineSettings) { - ((StandardCVPipelineSettings) settings).is3D = value; - } - } - - public boolean getIs3d() { - var settings = pipelineManager.getCurrentPipeline().settings; - if (settings instanceof StandardCVPipelineSettings) { - return ((StandardCVPipelineSettings) settings).is3D; - } - return false; - } - - /** - * VisionProcessRunnable will process images as quickly as possible - */ - private class VisionProcessRunnable implements Runnable { - - volatile Double fps = 0.0; - private CircularBuffer fpsAveragingBuffer = new CircularBuffer(7); - - @Override - public void run() { - var lastUpdateTimeNanos = System.nanoTime(); - var lastStreamTimeMs = System.currentTimeMillis(); - - System.out.printf("[%s Process] Vision Process Thread -- first run!\n", getCamera().getProperties().getNickname()); - - while (!Thread.interrupted()) { - - // blocking call, will block until camera has a new frame. - Pair camData = cameraCapture.getFrame(); - - Mat camFrame = camData.getLeft(); - if (camFrame.cols() > 0 && camFrame.rows() > 0) { - CVPipelineResult result = null; - try { - result = pipelineManager.getCurrentPipeline().runPipeline(camFrame); - } catch (Exception e) { - System.err.println("Exception in vision process " + getCamera().getProperties().getNickname() + "!"); - e.printStackTrace(); - } - - camFrame.release(); - - if (result != null) { - result.setTimestamp(camData.getRight()); - lastPipelineResult = result; - updateNetworkTableData(lastPipelineResult); - updateUI(lastPipelineResult); - } - } - - try { - var currentTime = System.currentTimeMillis(); - if ((currentTime - lastStreamTimeMs) / 1000d > 1.0 / 30.0) { - if(lastPipelineResult != null) { - cameraStreamer.runStream(lastPipelineResult.outputMat); - lastStreamTimeMs = currentTime; - lastPipelineResult.outputMat.release(); - } else { - System.err.printf("[%s Process] Last pipeline result was null!\n", getCamera().getProperties().getNickname()); - } - } - - } catch (Exception e) { -// Debug.printInfo("Vision running faster than stream."); - System.err.printf("[%s Process] Exception in vision thread!\n", getCamera().getProperties().getNickname()); - e.printStackTrace(); - } - - var deltaTimeNanos = System.nanoTime() - lastUpdateTimeNanos; - fpsAveragingBuffer.addFirst(1.0 / (deltaTimeNanos * 1E-09)); - lastUpdateTimeNanos = System.nanoTime(); - fps = getAverageFPS(); - } - } - - double getAverageFPS() { - var temp = 0.0; - for (int i = 0; i < 7; i++) { - temp += fpsAveragingBuffer.get(i); - } - temp /= 7.0; - return temp; - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java b/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java deleted file mode 100644 index a59a4b2cd..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.chameleonvision.vision.camera; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.vision.image.CaptureProperties; -import com.chameleonvision.vision.image.ImageCapture; -import edu.wpi.cscore.VideoMode; - -import java.util.List; - -public interface CameraCapture extends ImageCapture { - CaptureProperties getProperties(); - - VideoMode getCurrentVideoMode(); - - /** - * Set the exposure of the camera - * @param exposure the new exposure to set the camera to - */ - void setExposure(int exposure); - - /** - * Set the brightness of the camera - * @param brightness the new brightness to set the camera to - */ - void setBrightness(int brightness); - - /** - * Set the video mode (fps and resolution) of the camera - * @param mode the desired mode - */ - void setVideoMode(VideoMode mode); - - /** - * Set the video mode (fps and resolution) of the camera - * @param index the index of the desired mode - */ - void setVideoMode(int index); - - /** - * Set the gain of the camera - * NOTE - Not all cameras support this. - * @param gain the new gain to set the camera to - */ - void setGain(int gain); - - CameraCalibrationConfig getCurrentCalibrationData(); - List getAllCalibrationData(); -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java b/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java deleted file mode 100644 index 04578c44d..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.chameleonvision.vision.camera; - -import com.chameleonvision.vision.enums.StreamDivisor; -import com.chameleonvision.web.SocketHandler; -import edu.wpi.cscore.CvSource; -import edu.wpi.cscore.MjpegServer; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.cameraserver.CameraServer; -import org.opencv.core.CvType; -import org.opencv.core.Mat; -import org.opencv.core.Size; -import org.opencv.imgproc.Imgproc; - -public class CameraStreamer { - private final CameraCapture cameraCapture; - private final String name; - private StreamDivisor divisor; - private CvSource cvSource; - private final Object streamBufferLock = new Object(); - private Mat streamBuffer = new Mat(); - private Size size; - - public CameraStreamer(CameraCapture cameraCapture, String name,StreamDivisor div) { - this.divisor = div; - this.cameraCapture = cameraCapture; - this.name = name; - this.cvSource = CameraServer.getInstance().putVideo(name, - cameraCapture.getProperties().getStaticProperties().imageWidth / divisor.value, - cameraCapture.getProperties().getStaticProperties().imageHeight / divisor.value); - //noinspection IntegerDivisionInFloatingPointContext - this.size = new Size( - cameraCapture.getProperties().getStaticProperties().imageWidth / divisor.value, - cameraCapture.getProperties().getStaticProperties().imageHeight / divisor.value - ); - setDivisor(divisor, false); - } - - public void setDivisor(StreamDivisor newDivisor, boolean updateUI) { - this.divisor = newDivisor; - var camValues = cameraCapture.getProperties(); - var newWidth = camValues.getStaticProperties().imageWidth / newDivisor.value; - var newHeight = camValues.getStaticProperties().imageHeight / newDivisor.value; - this.size = new Size(newWidth, newHeight); - synchronized (streamBufferLock) { - this.streamBuffer = new Mat(newWidth, newHeight, CvType.CV_8UC3); - VideoMode oldVideoMode = cvSource.getVideoMode(); - cvSource.setVideoMode(new VideoMode(oldVideoMode.pixelFormat, - cameraCapture.getProperties().getStaticProperties().imageWidth / divisor.value, - cameraCapture.getProperties().getStaticProperties().imageHeight / divisor.value, - oldVideoMode.fps)); - } - if (updateUI) { - SocketHandler.sendFullSettings(); - } - - } - - public StreamDivisor getDivisor() { - return divisor; - } - - public void recalculateDivision() { - setDivisor(this.divisor, false); - } - - public void setNewVideoMode(VideoMode newVideoMode) { - // Trick to update cvSource and streamBuffer to the new resolution - // Must change the cameraProcess resolution first - setDivisor(divisor, true); - } - - public int getStreamPort() { - var s = (MjpegServer) CameraServer.getInstance().getServer("serve_" + name); - return s.getPort(); - } - - public void runStream(Mat image) { - synchronized (streamBufferLock) { - image.copyTo(streamBuffer); - } - - if (divisor.value != 1) { -// var camVal = cameraProcess.getProperties().staticProperties; -// var newWidth = camVal.imageWidth / divisor.value; -// var newHeight = camVal.imageHeight / divisor.value; -// Size newSize = new Size(newWidth, newHeight); - Imgproc.resize(streamBuffer, streamBuffer, this.size); - } - - var sourceVideoMode = cvSource.getVideoMode(); - var imageSize = streamBuffer.size(); - if(sourceVideoMode.width != (int) imageSize.width || sourceVideoMode.height != (int) imageSize.height) { - synchronized (streamBufferLock) { - cvSource.setVideoMode(new VideoMode(sourceVideoMode.pixelFormat, - (int)imageSize.width, - (int) imageSize.height, - sourceVideoMode.fps)); - } - } - - cvSource.putFrame(streamBuffer); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java b/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java deleted file mode 100644 index 73fc30760..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.chameleonvision.vision.camera; - -import edu.wpi.cscore.VideoMode; -import org.apache.commons.math3.fraction.Fraction; -import org.apache.commons.math3.util.FastMath; - -public class CaptureStaticProperties { - - public final int imageWidth; - public final int imageHeight; - public final double fov; - public final double imageArea; - public final double centerX; - public final double centerY; - public final double horizontalFocalLength; - public final double verticalFocalLength; - public final VideoMode mode; - - public CaptureStaticProperties(VideoMode mode, double fov) { - this.mode = mode; - this.imageWidth = mode.width; - this.imageHeight = mode.height; - this.fov = fov; - imageArea = this.imageWidth * this.imageHeight; - centerX = ((double) this.imageWidth / 2) - 0.5; - centerY = ((double) this.imageHeight / 2) - 0.5; - - // pinhole model calculations - double diagonalView = FastMath.toRadians(this.fov); - Fraction aspectFraction = new Fraction(this.imageWidth, this.imageHeight); - int horizontalRatio = aspectFraction.getNumerator(); - int verticalRatio = aspectFraction.getDenominator(); - double diagonalAspect = FastMath.hypot(horizontalRatio, verticalRatio); - double horizontalView = FastMath.atan(FastMath.tan(diagonalView / 2) * (horizontalRatio / diagonalAspect)) * 2; - double verticalView = FastMath.atan(FastMath.tan(diagonalView / 2) * (verticalRatio / diagonalAspect)) * 2; - horizontalFocalLength = this.imageWidth / (2 * FastMath.tan(horizontalView /2)); - verticalFocalLength = this.imageHeight / (2 * FastMath.tan(verticalView /2)); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java b/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java deleted file mode 100644 index 618b62ee1..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.chameleonvision.vision.camera; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.config.FullCameraConfiguration; -import com.chameleonvision.util.Helpers; -import edu.wpi.cscore.CvSink; -import edu.wpi.cscore.UsbCamera; -import edu.wpi.cscore.VideoException; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.cameraserver.CameraServer; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; -import org.opencv.core.Size; -import org.opencv.imgcodecs.Imgcodecs; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class USBCameraCapture implements CameraCapture { - private final UsbCamera baseCamera; - private final CvSink cvSink; - private List calibrationList; - private Mat imageBuffer = new Mat(); - private USBCaptureProperties properties; - - public USBCameraCapture(FullCameraConfiguration fullCameraConfiguration) { - var config = fullCameraConfiguration.cameraConfig; - this.calibrationList = new ArrayList<>(); //fullCameraConfiguration.calibration; - calibrationList.addAll(fullCameraConfiguration.calibration); - baseCamera = new UsbCamera(config.name, config.path); - cvSink = CameraServer.getInstance().getVideo(baseCamera); - try { - properties = new USBCaptureProperties(baseCamera, config); - } catch(VideoException e) { - System.err.println("Camera cannot be found on the saved USB port!" + - " Ensure that the camera has not been plugged into a different USB port, and if so, correct it."); - e.printStackTrace(); - } - - var videoModes = properties.getVideoModes(); - if(videoModes.size() < 1) { - throw new VideoException("0 video modes are valid! Full list provided by camera: \n\n" - + Arrays.stream(baseCamera.enumerateVideoModes()).map(Helpers::VideoModeToHashMap).toString() ); - } - - int videoMode = properties.videoModes.size() - 1 <= config.videomode ? config.videomode : 0; - setVideoMode(videoMode); - } - - public CameraCalibrationConfig getCalibration(Size size) { - for(var calibration: calibrationList) { - if(calibration.resolution.equals(size)) return calibration; - } - return null; - } - - public CameraCalibrationConfig getCalibration(VideoMode mode) { - return getCalibration(new Size(mode.width, mode.height)); - } - - public void addCalibrationData(CameraCalibrationConfig newConfig) { - calibrationList.removeIf(c -> newConfig.resolution.height == c.resolution.height && newConfig.resolution.width == c.resolution.width); - calibrationList.add(newConfig); - } - - @Override - public USBCaptureProperties getProperties() { - return properties; - } - - @Override - public VideoMode getCurrentVideoMode() { - return baseCamera.getVideoMode(); - } - - @Override - public Pair getFrame() { - Long deltaTime; - // TODO: Why multiply by 1000 here? - Mat tempMat = new Mat(); - deltaTime = cvSink.grabFrame(tempMat) * 1000L; -// tempMat = Imgcodecs.imread("C:\\Users\\imadu\\Documents\\GitHub\\chameleon-vision\\chameleon-server\\testimages\\2020\\image.png"); - tempMat.copyTo(imageBuffer); - tempMat.release(); - return Pair.of(imageBuffer, deltaTime); - } - - @Override - public void setExposure(int exposure) { - try { - baseCamera.setExposureManual(exposure); - } catch (VideoException e) { - System.err.println("Failed to change camera exposure!"); - } - } - - @Override - public void setBrightness(int brightness) { - try { - baseCamera.setBrightness(brightness); - } catch (VideoException e) { - System.err.println("Failed to change camera brightness!"); - } - } - - @Override - public void setVideoMode(VideoMode mode) { - try { - baseCamera.setVideoMode(mode); - properties.updateVideoMode(mode); - } catch (VideoException e) { - System.err.println("Failed to change camera video mode!"); - } - } - - public void setVideoMode(int index){ - VideoMode mode = properties.getVideoModes().get(index); - setVideoMode(mode); - } - - @Override - public void setGain(int gain) { - if (properties.isPS3Eye) { - try { - baseCamera.getProperty("gain_automatic").set(0); - baseCamera.getProperty("gain").set(gain); - } catch (Exception e) { - System.err.println("Failed to change camera gain!"); - } - } - } - - @Override - public CameraCalibrationConfig getCurrentCalibrationData() { - return getCalibration(getCurrentVideoMode()); - } - - @Override - public List getAllCalibrationData() { - return calibrationList; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCaptureProperties.java b/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCaptureProperties.java deleted file mode 100644 index 4bca63bfb..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/camera/USBCaptureProperties.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.chameleonvision.vision.camera; - -import com.chameleonvision.config.CameraJsonConfig; -import com.chameleonvision.util.Platform; -import com.chameleonvision.vision.image.CaptureProperties; -import edu.wpi.cscore.UsbCamera; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.wpilibj.geometry.Rotation2d; - -import java.util.Arrays; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class USBCaptureProperties extends CaptureProperties { - public static final double DEFAULT_FOV = 70; - private static final int DEFAULT_EXPOSURE = 50; - private static final int DEFAULT_BRIGHTNESS = 50; - private static final int MINIMUM_FPS = 21; - private static final int MINIMUM_WIDTH = 320; - private static final int MINIMUM_HEIGHT = 200; - private static final int MAX_INIT_MS = 1500; - - private static final int PS3EYE_VID = 0x1415; - private static final int PS3EYE_PID = 0x2000; - - private static final List ALLOWED_PIXEL_FORMATS = Arrays.asList(VideoMode.PixelFormat.kYUYV, VideoMode.PixelFormat.kMJPEG, VideoMode.PixelFormat.kBGR); - - private static final Predicate kMinFPSPredicate = (videoMode -> videoMode.fps >= MINIMUM_FPS); - private static final Predicate kMinSizePredicate = (videoMode -> videoMode.width >= MINIMUM_WIDTH && videoMode.height >= MINIMUM_HEIGHT); - private static final Predicate kPixelFormatPredicate = (videoMode -> ALLOWED_PIXEL_FORMATS.contains(videoMode.pixelFormat)); - - public final String name; - public final String path; - public final List videoModes; - - private final UsbCamera baseCamera; - public final boolean isPS3Eye; - - private String nickname; - private double FOV; - - USBCaptureProperties(UsbCamera baseCamera, CameraJsonConfig config) { - FOV = config.fov; - name = config.name; - path = config.path; - setTilt(Rotation2d.fromDegrees(config.tilt)); - nickname = config.nickname; - this.baseCamera = baseCamera; - - int usbVID = baseCamera.getInfo().vendorId; - int usbPID = baseCamera.getInfo().productId; - - // wait for camera USB init on Windows, Windows USB is slow... - if (Platform.CurrentPlatform == Platform.WINDOWS_64 && !baseCamera.isConnected()) { - System.out.print("Waiting on camera... "); - long initTimeout = System.nanoTime(); - while (!baseCamera.isConnected()) { - if (((System.nanoTime() - initTimeout) / 1e6) >= MAX_INIT_MS) { - break; - } - } - var initTimeMs = (System.nanoTime() - initTimeout) / 1e6; - System.out.printf("USBCameraProcess initialized in %.2fms\n", initTimeMs); - } - - isPS3Eye = (usbVID == PS3EYE_VID && usbPID == PS3EYE_PID); - videoModes = filterVideoModes(baseCamera.enumerateVideoModes()); - } - - public void setFOV(double FOV) { - if (this.FOV != FOV) { - this.FOV = FOV; - staticProperties = new CaptureStaticProperties(staticProperties.mode, FOV); - } - } - - public double getFOV() { - return FOV; - } - - public void setNickname(String nickname) { - this.nickname = nickname; - } - - public String getNickname() { - return nickname; - } - - private List filterVideoModes(VideoMode[] videoModes) { - Predicate fullPredicate = kMinFPSPredicate.and(kMinSizePredicate).and(kPixelFormatPredicate); - Stream validModes = Arrays.stream(videoModes).filter(fullPredicate); - return validModes.collect(Collectors.toList()); - } - - void updateVideoMode(VideoMode videoMode) { - staticProperties = new CaptureStaticProperties(videoMode, FOV); - } - - public List getVideoModes() { - return videoModes; - } - - public VideoMode getVideoMode(int index){ - return videoModes.get(index); - } - - public VideoMode getCurrentVideoMode() { return staticProperties.mode; } - - public int getCurrentVideoModeIndex(){ - return getVideoModes().indexOf(getCurrentVideoMode()); - } - - - -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/CalibrationMode.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/CalibrationMode.java deleted file mode 100644 index 42e14407e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/CalibrationMode.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum CalibrationMode { - None,Single,Dual -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageFlipMode.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageFlipMode.java deleted file mode 100644 index 3bfb9a073..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageFlipMode.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum ImageFlipMode { - NONE(Integer.MIN_VALUE), - VERTICAL(1), - HORIZONTAL(0), - BOTH(-1); - - public final int value; - - ImageFlipMode(int value) { - this.value = value; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java deleted file mode 100644 index b22150aab..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.chameleonvision.vision.enums; - -import org.opencv.core.Core; - -public enum ImageRotationMode { - DEG_0(-1), - DEG_90(Core.ROTATE_90_CLOCKWISE), - DEG_180(Core.ROTATE_180), - DEG_270(Core.ROTATE_90_COUNTERCLOCKWISE); - - public final int value; - - ImageRotationMode(int value) { - this.value = value; - } - - public boolean isRotated(){return this.value==DEG_90.value||this.value==DEG_270.value;} -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/SortMode.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/SortMode.java deleted file mode 100644 index 5ac43650f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/SortMode.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum SortMode { - Largest,Smallest,Highest,Lowest,Rightmost,Leftmost,Centermost -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/StreamDivisor.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/StreamDivisor.java deleted file mode 100644 index 45c487cde..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/StreamDivisor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum StreamDivisor { - NONE(1), - HALF(2), - QUARTER(4), - SIXTH(6); - - public final Integer value; - - StreamDivisor(int value) { - this.value = value; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetGroup.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetGroup.java deleted file mode 100644 index f1fef709c..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetGroup.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum TargetGroup { - Single, - Dual -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetIntersection.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetIntersection.java deleted file mode 100644 index 780f2b01a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetIntersection.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum TargetIntersection { - None,Up,Down,Left,Right -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetOrientation.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetOrientation.java deleted file mode 100644 index e0d73bef1..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetOrientation.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum TargetOrientation { - Portrait, Landscape -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetRegion.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetRegion.java deleted file mode 100644 index f058d1c2c..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/TargetRegion.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.chameleonvision.vision.enums; - -public enum TargetRegion { - Center, Top, Bottom, Left, Right -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java b/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java deleted file mode 100644 index c2e2374bc..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.chameleonvision.vision.image; - -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.wpilibj.geometry.Rotation2d; -import org.opencv.core.Mat; - -public class CaptureProperties { - - protected CaptureStaticProperties staticProperties; - private Rotation2d tilt = new Rotation2d(); - - protected CaptureProperties() { - } - - public CaptureProperties(VideoMode videoMode, double fov) { - staticProperties = new CaptureStaticProperties(videoMode, fov); - } - public void setStaticProperties(CaptureStaticProperties staticProperties) {this.staticProperties = staticProperties;} - public CaptureStaticProperties getStaticProperties() { - return staticProperties; - } - - public Rotation2d getTilt() { - return tilt; - } - - public void setTilt(Rotation2d tilt) { - this.tilt = tilt; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/image/ImageCapture.java b/chameleon-server/src/main/java/com/chameleonvision/vision/image/ImageCapture.java deleted file mode 100644 index 1d7b3820e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/image/ImageCapture.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.chameleonvision.vision.image; - -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; - -public interface ImageCapture { - /** - * Get the next camera frame - * @return a Pair of the captured image and the Linux epoch of when the frame was grabbed (in uS) - */ - Pair getFrame(); -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/image/StaticImageCapture.java b/chameleon-server/src/main/java/com/chameleonvision/vision/image/StaticImageCapture.java deleted file mode 100644 index 820a9097d..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/image/StaticImageCapture.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.chameleonvision.vision.image; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.camera.USBCaptureProperties; -import edu.wpi.cscore.VideoMode; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; -import org.opencv.imgcodecs.Imgcodecs; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; - -public class StaticImageCapture implements CameraCapture { - - private Mat image = new Mat(); - private final VideoMode fakeVideoMode; - private final com.chameleonvision.vision.image.CaptureProperties properties; - - public StaticImageCapture(Path imagePath) { - this(imagePath, 70); - } - - public StaticImageCapture(Path imagePath, double FOV) { - if (!Files.exists(imagePath)) throw new RuntimeException("Invalid path for image!"); - - Mat loadedImage = Imgcodecs.imread(imagePath.toString()); - loadedImage.copyTo(image); - if (image.cols() > 0 && image.rows() > 0) { - fakeVideoMode = new VideoMode(VideoMode.PixelFormat.kBGR, image.cols(), image.rows(), 60); - } else { - throw new RuntimeException("Failed to load image!"); - } - - properties = new com.chameleonvision.vision.image.CaptureProperties(fakeVideoMode, FOV); - } - - @Override - public Pair getFrame() { - return Pair.of(image, System.nanoTime()); - } - - @Override - public CaptureProperties getProperties() { - return properties; - } - - @Override - public VideoMode getCurrentVideoMode() { - return fakeVideoMode; - } - - @Override - public void setExposure(int exposure) { - // do nothing - } - - @Override - public void setBrightness(int brightness) { - // do nothing - } - - @Override - public void setVideoMode(VideoMode mode) { - // do nothing - } - - @Override - public void setVideoMode(int index) { - // do nothing - } - - @Override - public void setGain(int gain) { - // do nothing - } - - @Override - public CameraCalibrationConfig getCurrentCalibrationData() { - return null; - } - - @Override - public List getAllCalibrationData() { - return null; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java deleted file mode 100644 index a51073778..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.chameleonvision.vision.pipeline; - -import com.chameleonvision.vision.camera.CameraCapture; -import org.opencv.core.Mat; - -/** - * - * @param Pipeline result type - */ -public abstract class CVPipeline { - protected Mat outputMat = new Mat(); - protected CameraCapture cameraCapture; - public S settings; - - protected CVPipeline(S settings) { - this.settings = settings; - } - - protected CVPipeline(String pipelineName, S settings) { - this.settings = settings; - settings.nickname = pipelineName; - } - - public void initPipeline(CameraCapture camera) { - cameraCapture = camera; - cameraCapture.setVideoMode(settings.videoModeIndex); - cameraCapture.setExposure((int) settings.exposure); - cameraCapture.setBrightness((int) settings.brightness); - cameraCapture.setGain((int) settings.gain); - } - abstract public R runPipeline(Mat inputMat); -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineResult.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineResult.java deleted file mode 100644 index 3ff88f09d..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineResult.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.chameleonvision.vision.pipeline; - -import org.opencv.core.Mat; - -import java.util.List; - -public abstract class CVPipelineResult { - public final List targets; - public final boolean hasTarget; - public final Mat outputMat = new Mat(); - public final long processTime; - public long imageTimestamp = 0; - - public CVPipelineResult(List targets, Mat outputMat, long processTime) { - this.targets = targets; - hasTarget = targets != null && !targets.isEmpty(); -// this.outputMat = outputMat; - outputMat.copyTo(this.outputMat); - outputMat.release(); - this.processTime = processTime; - } - - public void setTimestamp(long timestamp) { - imageTimestamp = timestamp; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineSettings.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineSettings.java deleted file mode 100644 index a4021691d..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipelineSettings.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.chameleonvision.vision.pipeline; - -import com.chameleonvision.vision.enums.ImageFlipMode; -import com.chameleonvision.vision.enums.ImageRotationMode; -import com.chameleonvision.vision.enums.StreamDivisor; - -@SuppressWarnings("ALL") -public class CVPipelineSettings { - public int index = 0; - public ImageFlipMode flipMode = ImageFlipMode.NONE; - public ImageRotationMode rotationMode = ImageRotationMode.DEG_0; - public String nickname = "New Pipeline"; - public double exposure = 50.0; - public double brightness = 50.0; - public double gain = 0; - public int videoModeIndex = 0; - public StreamDivisor streamDivisor = StreamDivisor.NONE; -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/Pipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/Pipe.java deleted file mode 100644 index 8fd8104d0..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/Pipe.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.chameleonvision.vision.pipeline; - -import org.apache.commons.lang3.tuple.Pair; - -public interface Pipe { - /** - * - * @param input Input object for pipe - * @return Returns a Pair containing the process time in Nanoseconds, - * and the output object - */ - Pair run(I input); -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java deleted file mode 100644 index 6feda6f1e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.chameleonvision.vision.pipeline; - -import com.chameleonvision.Exceptions.DuplicatedKeyException; -import com.chameleonvision.config.CameraConfig; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.scripting.ScriptEventType; -import com.chameleonvision.scripting.ScriptManager; -import com.chameleonvision.vision.VisionManager; -import com.chameleonvision.vision.VisionProcess; -import com.chameleonvision.vision.pipeline.impl.Calibrate3dPipeline; -import com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import com.chameleonvision.web.SocketHandler; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.networktables.NetworkTableEntry; - -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class PipelineManager { - - private static final int DRIVERMODE_INDEX = -1; - private static final int CAL_3D_INDEX = -2; - - public final LinkedList pipelines = new LinkedList<>(); - - public final CVPipeline driverModePipeline = new DriverVisionPipeline(new CVPipelineSettings()); - public final Calibrate3dPipeline calib3dPipe = new Calibrate3dPipeline(new StandardCVPipelineSettings()); - - private final VisionProcess parentProcess; - private int lastPipelineIndex; - private int currentPipelineIndex; - public NetworkTableEntry ntIndexEntry; - - public PipelineManager(VisionProcess visionProcess, List loadedPipelineSettings) { - parentProcess = visionProcess; - if (loadedPipelineSettings == null || loadedPipelineSettings.size() == 0) { - pipelines.add(new StandardCVPipeline("New Pipeline")); - } else { - for (CVPipelineSettings setting : loadedPipelineSettings) { - addInternalPipeline(setting); - } - } - driverModePipeline.initPipeline(visionProcess.getCamera()); - setCurrentPipeline(0); - } - - private void reassignIndexes() { - pipelines.sort(IndexComparator); - for (int i = 0; i < pipelines.size(); i++) { - pipelines.get(i).settings.index = i; - } - } - - private CameraConfig getConfig(VisionProcess process) { - return VisionManager.getCameraConfig(process); - } - - private CameraConfig getConfig() { - return getConfig(parentProcess); - } - - private void savePipelineConfig(CVPipelineSettings setting) { - getConfig().pipelineConfig.save(setting); - } - - private void deletePipelineConfig(CVPipelineSettings setting) { - getConfig().pipelineConfig.delete(setting); - } - - private void renamePipelineConfig(CVPipelineSettings setting, String newName) { - getConfig().pipelineConfig.rename(setting, newName); - } - - public void saveAllPipelines() { - pipelines.parallelStream().map(pipeline -> pipeline.settings).forEach(this::savePipelineConfig); - } - - private void addInternalPipeline(CVPipelineSettings setting) { - if (setting instanceof StandardCVPipelineSettings) { - pipelines.add(new StandardCVPipeline((StandardCVPipelineSettings) setting)); - } else { - System.out.println("Non 2D/3D pipelines not supported!"); - } - reassignIndexes(); - } - - public void setDriverMode(boolean driverMode) { - if (driverMode) setCurrentPipeline(DRIVERMODE_INDEX); - else setCurrentPipeline(lastPipelineIndex); - } - - public void setCalibrationMode(boolean calibrationMode) { - setCurrentPipeline((calibrationMode ? CAL_3D_INDEX : lastPipelineIndex)); - } - - public void enableCalibrationMode(VideoMode mode) { - parentProcess.setVideoMode(mode); - calib3dPipe.setVideoMode(mode); - setCalibrationMode(true); - } - - public boolean getDriverMode() { - return currentPipelineIndex == DRIVERMODE_INDEX; - } - - public int getCurrentPipelineIndex() { - return currentPipelineIndex; - } - - public CVPipeline getCurrentPipeline() { - if (currentPipelineIndex == DRIVERMODE_INDEX) { - return driverModePipeline; - } else if (currentPipelineIndex <= CAL_3D_INDEX) { - return calib3dPipe; - } else { - return pipelines.get(currentPipelineIndex); - } - } - - public void setCurrentPipeline(int index) { - CVPipeline newPipeline = null; - - if (index == DRIVERMODE_INDEX) { - ScriptManager.queueEvent(ScriptEventType.kLEDOff); - newPipeline = driverModePipeline; - - // if we're changing into driver mode, try to set the nt entry to true - parentProcess.setDriverModeEntry(true); - } else if (index == CAL_3D_INDEX) { - parentProcess.setDriverModeEntry(true); - - newPipeline = calib3dPipe; - } else { - if (index < pipelines.size()&&index>=0) { - newPipeline = pipelines.get(index); - - // if we're switching out of driver mode, try to set the nt entry to false - parentProcess.setDriverModeEntry(false); - ScriptManager.queueEvent(ScriptEventType.kLEDOn); - } - else - { - //TODO alert/warn user that pipeline doesnt exsits - System.err.println("Index is out of bounds"); - } - } - if (newPipeline != null) { - lastPipelineIndex = currentPipelineIndex; - currentPipelineIndex = index; - getCurrentPipeline().initPipeline(parentProcess.getCamera()); - - if (ConfigManager.settings.currentCamera.equals(parentProcess.getCamera().getProperties().name)) { - ConfigManager.settings.currentPipeline = currentPipelineIndex; - - HashMap pipeChange = new HashMap<>(); - pipeChange.put("currentPipeline", currentPipelineIndex); - SocketHandler.broadcastMessage(pipeChange); - try { - SocketHandler.sendFullSettings(); - } catch (Exception e) { - // avoid NullPointerException when run before threads start - } - } - newPipeline.initPipeline(parentProcess.getCamera()); - if (parentProcess.cameraStreamer != null) - parentProcess.cameraStreamer.setDivisor(newPipeline.settings.streamDivisor, true); - if (ntIndexEntry != null) { - ntIndexEntry.setDouble(index); - } - } - - // gain setting quirk - if (!parentProcess.cameraCapture.getProperties().isPS3Eye) { - getCurrentPipeline().settings.gain = -1; - } - } - - public void addPipeline(CVPipelineSettings setting) { - addInternalPipeline(setting); - savePipelineConfig(setting); - } - - public void addPipeline(CVPipeline pipeline) { - pipelines.add(pipeline); - reassignIndexes(); - savePipelineConfig(pipeline.settings); - } - - public void addNewPipeline(String piplineName) { - StandardCVPipeline newPipeline = new StandardCVPipeline(); - newPipeline.settings.nickname = piplineName; - newPipeline.settings.index = pipelines.size(); - addPipeline(newPipeline); - } - - public CVPipeline getPipeline(int index) { - return pipelines.get(index); - } - - public void duplicatePipeline(CVPipelineSettings pipeline) throws DuplicatedKeyException { - duplicatePipeline(pipeline, parentProcess); - } - - public void duplicatePipeline(CVPipelineSettings pipeline, VisionProcess destinationProcess) throws DuplicatedKeyException { - pipeline.index = destinationProcess.pipelineManager.pipelines.size(); - pipeline.nickname += "(Copy)"; - if (destinationProcess.pipelineManager.pipelines.stream().anyMatch(c -> c.settings.nickname.equals(pipeline.nickname))){ - throw new DuplicatedKeyException("key Already exists"); - } else{ - destinationProcess.pipelineManager.addPipeline(pipeline); - } - } - - public void renameCurrentPipeline(String newName) { - CVPipelineSettings settings = getCurrentPipeline().settings; - renamePipelineConfig(settings, newName); - } - - public void deleteCurrentPipeline() { - deletePipeline(currentPipelineIndex); - } - - private void deletePipeline(int index) { - if (index == currentPipelineIndex) { - currentPipelineIndex -= 1; - } - deletePipelineConfig(getPipeline(index).settings); - pipelines.remove(index); - reassignIndexes(); - } - - public void saveDriverModeConfig() { - getConfig().saveDriverMode(driverModePipeline.settings); - } - - private static final Comparator IndexComparator = (o1, o2) -> { - int o1Index = o1.settings.index; - int o2Index = o2.settings.index; - - if (o1Index == o2Index) { - return 0; - } else if (o1Index < o2Index) { - return -1; - } - return 1; - }; -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/Calibrate3dPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/Calibrate3dPipeline.java deleted file mode 100644 index e46a15bdb..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/Calibrate3dPipeline.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.chameleonvision.vision.pipeline.impl; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.vision.VisionManager; -import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.pipeline.CVPipeline; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import edu.wpi.cscore.VideoMode; -import edu.wpi.first.wpilibj.util.Units; -import org.opencv.calib3d.Calib3d; -import org.opencv.core.*; -import org.opencv.imgproc.Imgproc; - -import java.util.ArrayList; -import java.util.List; - -public class Calibrate3dPipeline extends CVPipeline { - - private int checkerboardSquaresHigh = 7; - private int checkerboardSquaresWide = 7; - - private MatOfPoint3f objP;// new MatOfPoint3f(checkerboardSquaresHigh + checkerboardSquaresWide, 3);//(checkerboardSquaresWide * checkerboardSquaresHigh, 3); - private Size patternSize = new Size(checkerboardSquaresHigh, checkerboardSquaresWide); - private Size imageSize; - double checkerboardSquareSize = 1; // inches! - private MatOfPoint2f calibrationOutput = new MatOfPoint2f(); - private List objpoints = new ArrayList<>(); - private List imgpoints = new ArrayList<>(); - - public static double checkerboardSquareSizeUnits = Units.inchesToMeters(1.0); - - public static final int MIN_COUNT = 15; - private VideoMode calibrationMode; - private final Size windowSize = new Size(11, 11); - private final Size zeroZone = new Size(-1, -1); - private TermCriteria criteria = new TermCriteria(3, 30, 0.001); //(Imgproc.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) - - private int captureCount = 0; - private double calibrationAccuracy = 0; - private boolean wantsSnapshot = false; - private double squareSizeInches; - - public Calibrate3dPipeline(StandardCVPipelineSettings settings) { - super(settings); - - objP = new MatOfPoint3f(); - - for(int i = 0; i < checkerboardSquaresHigh * checkerboardSquaresWide; i++) { - objP.push_back(new MatOfPoint3f(new Point3(i / checkerboardSquaresWide, i % checkerboardSquaresHigh, 0.0f))); - } - - setSquareSize(checkerboardSquareSizeUnits); - - objpoints.forEach(Mat::release); - imgpoints.forEach(Mat::release); - objpoints.clear(); - imgpoints.clear(); - } - - public void setSquareSize(double size) { - this.squareSizeInches = size; - } - - public void takeSnapshot() { - wantsSnapshot = true; - } - - public boolean hasEnoughSnapshots() { - return captureCount >= MIN_COUNT - 1; - } - - @Override - public DriverVisionPipeline.DriverPipelineResult runPipeline(Mat inputMat) { - - // look for checkerboard - Imgproc.cvtColor(inputMat, inputMat, Imgproc.COLOR_BGR2GRAY); - var checkerboardFound = Calib3d.findChessboardCorners(inputMat, patternSize, calibrationOutput); - - - - if(!checkerboardFound) { - Imgproc.cvtColor(inputMat, inputMat, Imgproc.COLOR_GRAY2BGR); - - return new DriverVisionPipeline.DriverPipelineResult(null, inputMat, 0); - } - -// System.out.println("[SolvePNP] checkerboard found!!"); - - // cool we found a checkerboard - // do corner subpixel - Imgproc.cornerSubPix(inputMat, calibrationOutput, windowSize, zeroZone, criteria); - - // convert back to BGR - Imgproc.cvtColor(inputMat, inputMat, Imgproc.COLOR_GRAY2BGR); - // draw the chessboard - Calib3d.drawChessboardCorners(inputMat, patternSize, calibrationOutput, true); - - if(wantsSnapshot) { - this.imageSize = new Size(inputMat.width(), inputMat.height()); - - var mat = new MatOfPoint3f(); - calibrationOutput.copyTo(mat); - this.objpoints.add(objP); - imgpoints.add(mat); - captureCount++; - wantsSnapshot = false; - } - - imageSize = new Size(inputMat.width(), inputMat.height()); - - return new DriverVisionPipeline.DriverPipelineResult(null, inputMat, 0); - } - - @Override - public void initPipeline(CameraCapture camera) { - super.initPipeline(camera); - objpoints.clear(); - imgpoints.clear(); - captureCount = 0; - } - - public boolean tryCalibration() { - if (!hasEnoughSnapshots()) return false; - - Mat cameraMatrix = new Mat(); - Mat distortionCoeffs = new Mat(); - List rvecs = new ArrayList<>(); - List tvecs = new ArrayList<>(); - - try { - calibrationAccuracy = Calib3d.calibrateCamera(objpoints, imgpoints, imageSize, cameraMatrix, distortionCoeffs, rvecs, tvecs); - } catch(Exception e) { - System.err.println("Camera calibration failed!"); - initPipeline(cameraCapture); - return false; - } - - VideoMode currentVidMode = cameraCapture.getCurrentVideoMode(); - Size resolution = new Size(currentVidMode.width, currentVidMode.height); - CameraCalibrationConfig cal = new CameraCalibrationConfig(resolution, cameraMatrix, distortionCoeffs, squareSizeInches); - - VisionManager.getCurrentUIVisionProcess().addCalibration(cal); - - try { - System.out.printf("CALIBRATION SUCCESS (with accuracy %s)! camMatrix: \n%s\ndistortionCoeffs:\n%s\n", - calibrationAccuracy, new ObjectMapper().writeValueAsString(cal.cameraMatrix), new ObjectMapper().writeValueAsString(cal.distortionCoeffs)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - - - ConfigManager.saveGeneralSettings(); - - return true; - } - - public void setVideoMode(VideoMode mode){ - this.calibrationMode = mode; - } - - public int getSnapshotCount() { - return captureCount + 1; - } - - public double getCalibrationAccuracy(){ - return calibrationAccuracy; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java deleted file mode 100644 index e0f2704dd..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.chameleonvision.vision.pipeline.impl; - -import com.chameleonvision.util.MemoryManager; -import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.pipeline.CVPipeline; -import com.chameleonvision.vision.pipeline.CVPipelineResult; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; -import com.chameleonvision.vision.pipeline.pipes.Draw2dCrosshairPipe; -import com.chameleonvision.vision.pipeline.pipes.RotateFlipPipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; - -import java.util.List; - -import static com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline.DriverPipelineResult; - -public class DriverVisionPipeline extends CVPipeline { - - private RotateFlipPipe rotateFlipPipe; - private Draw2dCrosshairPipe drawCrosshairPipe; - private Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings crosshairPipeSettings = new Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings(); - - private final MemoryManager memoryManager = new MemoryManager(200, 20000); - - public DriverVisionPipeline(CVPipelineSettings settings) { - super(settings); - settings.index = -1; - } - - @Override - public void initPipeline(CameraCapture capture) { - super.initPipeline(capture); - rotateFlipPipe = new RotateFlipPipe(settings.rotationMode, settings.flipMode); - crosshairPipeSettings.showCrosshair=true; - drawCrosshairPipe = new Draw2dCrosshairPipe(crosshairPipeSettings, CalibrationMode.None,null,0,0); - } - - @Override - public DriverPipelineResult runPipeline(Mat inputMat) { - - rotateFlipPipe.setConfig(settings.rotationMode, settings.flipMode); - - Pair rotateFlipResult = rotateFlipPipe.run(inputMat); - Pair draw2dCrosshairResult = drawCrosshairPipe.run(Pair.of(rotateFlipResult.getLeft(),null)); - memoryManager.run(); - - return new DriverPipelineResult(null, draw2dCrosshairResult.getLeft(), 0); - } - - public static class DriverPipelineResult extends CVPipelineResult { - public DriverPipelineResult(List targets, Mat outputMat, long processTime) { - super(targets, outputMat, processTime); - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipeline.java deleted file mode 100644 index 836f33b39..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipeline.java +++ /dev/null @@ -1,286 +0,0 @@ -package com.chameleonvision.vision.pipeline.impl; - -import com.chameleonvision.Main; -import com.chameleonvision.util.MemoryManager; -import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.pipeline.CVPipeline; -import com.chameleonvision.vision.pipeline.CVPipelineResult; -import com.chameleonvision.vision.pipeline.pipes.*; -import edu.wpi.first.wpilibj.geometry.Pose2d; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Point; -import org.opencv.core.*; - -import java.awt.*; -import java.util.List; - -import static com.chameleonvision.vision.pipeline.impl.StandardCVPipeline.StandardCVPipelineResult; - -@SuppressWarnings("WeakerAccess") -public class StandardCVPipeline extends CVPipeline { - - private Mat rawCameraMat = new Mat(); - - private RotateFlipPipe rotateFlipPipe; - private BlurPipe blurPipe; - private ErodeDilatePipe erodeDilatePipe; - private HsvPipe hsvPipe; - private FindContoursPipe findContoursPipe; - private FilterContoursPipe filterContoursPipe; - private SpeckleRejectPipe speckleRejectPipe; - private GroupContoursPipe groupContoursPipe; - private SortContoursPipe sortContoursPipe; - private Collect2dTargetsPipe collect2dTargetsPipe; - private Draw2dContoursPipe.Draw2dContoursSettings draw2dContoursSettings; - private Draw2dContoursPipe draw2dContoursPipe; - private Draw2dCrosshairPipe draw2dCrosshairPipe; - private DrawSolvePNPPipe drawSolvePNPPipe; - private SolvePNPPipe solvePNPPipe; - private Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings draw2dCrosshairPipeSettings; - private OutputMatPipe outputMatPipe; - - private String pipelineTimeString = ""; - private CaptureStaticProperties camProps; - private Scalar hsvLower, hsvUpper; - - public StandardCVPipeline() { - super(new StandardCVPipelineSettings()); - } - - public StandardCVPipeline(String name) { - super(name, new StandardCVPipelineSettings()); - } - - public StandardCVPipeline(StandardCVPipelineSettings settings) { - super(settings); - } - - @Override - public void initPipeline(CameraCapture process) { - super.initPipeline(process); - - camProps = cameraCapture.getProperties().getStaticProperties(); - hsvLower = new Scalar(settings.hue.get(0).intValue(), settings.saturation.get(0).intValue(), settings.value.get(0).intValue()); - hsvUpper = new Scalar(settings.hue.get(1).intValue(), settings.saturation.get(1).intValue(), settings.value.get(1).intValue()); - - rotateFlipPipe = new RotateFlipPipe(settings.rotationMode, settings.flipMode); - blurPipe = new BlurPipe(5); - erodeDilatePipe = new ErodeDilatePipe(settings.erode, settings.dilate, 7); - hsvPipe = new HsvPipe(hsvLower, hsvUpper); - findContoursPipe = new FindContoursPipe(); - filterContoursPipe = new FilterContoursPipe(settings.area, settings.ratio, settings.extent, camProps); - speckleRejectPipe = new SpeckleRejectPipe(settings.speckle.doubleValue()); - groupContoursPipe = new GroupContoursPipe(settings.targetGroup, settings.targetIntersection); - sortContoursPipe = new SortContoursPipe(settings.sortMode, camProps, 5); - collect2dTargetsPipe = new Collect2dTargetsPipe(settings.calibrationMode, settings.targetRegion, settings.targetOrientation, settings.point, settings.dualTargetCalibrationM, settings.dualTargetCalibrationB, camProps); - draw2dContoursSettings = new Draw2dContoursPipe.Draw2dContoursSettings(); - draw2dCrosshairPipeSettings = new Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings(); - - draw2dContoursSettings.showCentroid = true; - draw2dContoursSettings.centroidColor = new Color(25, 239, 0); - draw2dContoursSettings.boxOutlineSize = 2; - draw2dContoursSettings.showRotatedBox = true; - draw2dContoursSettings.showMaximumBox = true; - draw2dContoursSettings.showMultiple = settings.multiple; - draw2dCrosshairPipeSettings.showCrosshair = true; - draw2dContoursPipe = new Draw2dContoursPipe(draw2dContoursSettings, camProps); - draw2dCrosshairPipe = new Draw2dCrosshairPipe(draw2dCrosshairPipeSettings, settings.calibrationMode, settings.point, settings.dualTargetCalibrationM, settings.dualTargetCalibrationB); - outputMatPipe = new OutputMatPipe(settings.isBinary); - } - - private final MemoryManager memManager = new MemoryManager(120, 20000); - - private StandardCVPipelineResult resultCache = new StandardCVPipelineResult(List.of(), new Mat(), 0L); - - @Override - public StandardCVPipelineResult runPipeline(Mat inputMat) { - long totalPipelineTimeNanos = 0; - long pipelineStartTimeNanos = System.nanoTime(); - - resultCache.release(); - - if (cameraCapture == null) { - throw new RuntimeException("Pipeline was not initialized before being run!"); - } - - // TODO (HIGH) find the source of the random NPE - if (settings == null) { - throw new RuntimeException("settings was not initialized!"); - } - if (inputMat.cols() <= 1) { - throw new RuntimeException("Input Mat is empty!"); - } - - pipelineTimeString = ""; - - // prepare pipes - camProps = cameraCapture.getProperties().getStaticProperties(); - hsvLower = new Scalar(settings.hue.get(0).intValue(), settings.saturation.get(0).intValue(), settings.value.get(0).intValue()); - hsvUpper = new Scalar(settings.hue.get(1).intValue(), settings.saturation.get(1).intValue(), settings.value.get(1).intValue()); - rotateFlipPipe.setConfig(settings.rotationMode, settings.flipMode); - blurPipe.setConfig(0); - erodeDilatePipe.setConfig(settings.erode, settings.dilate, 7); - hsvPipe.setConfig(hsvLower, hsvUpper); - filterContoursPipe.setConfig(settings.area, settings.ratio, settings.extent, camProps); - speckleRejectPipe.setConfig(settings.speckle.doubleValue()); - groupContoursPipe.setConfig(settings.targetGroup, settings.targetIntersection); - sortContoursPipe.setConfig(settings.sortMode, camProps, 5); - collect2dTargetsPipe = new Collect2dTargetsPipe(settings.calibrationMode, settings.targetRegion, settings.targetOrientation, settings.point, settings.dualTargetCalibrationM, settings.dualTargetCalibrationB, camProps); - draw2dContoursPipe.setConfig(settings.multiple, camProps); - draw2dCrosshairPipe.setConfig(draw2dCrosshairPipeSettings, settings.calibrationMode, settings.point, settings.dualTargetCalibrationM, settings.dualTargetCalibrationB); - outputMatPipe.setConfig(settings.isBinary); - - if (settings.is3D) { - if (solvePNPPipe == null) - solvePNPPipe = new SolvePNPPipe(settings, cameraCapture.getCurrentCalibrationData(), cameraCapture.getProperties().getTilt()); - if (drawSolvePNPPipe == null) - drawSolvePNPPipe = new DrawSolvePNPPipe(settings, cameraCapture.getCurrentCalibrationData()); - - solvePNPPipe.setConfig(settings, cameraCapture.getCurrentCalibrationData(), cameraCapture.getProperties().getTilt()); - drawSolvePNPPipe.setConfig(cameraCapture.getCurrentCalibrationData()); - drawSolvePNPPipe.setConfig(settings); - - } - - long pipeInitTimeNanos = System.nanoTime() - pipelineStartTimeNanos; - - // run pipes - Pair rotateFlipResult = rotateFlipPipe.run(inputMat); - totalPipelineTimeNanos += rotateFlipResult.getRight(); - - inputMat.copyTo(rawCameraMat); - -// Pair blurResult = blurPipe.run(rotateFlipResult.getLeft()); -// totalPipelineTimeNanos += blurResult.getRight(); - - Pair erodeDilateResult = erodeDilatePipe.run(rotateFlipResult.getLeft()); - totalPipelineTimeNanos += erodeDilateResult.getRight(); - - Pair hsvResult = hsvPipe.run(erodeDilateResult.getLeft()); - totalPipelineTimeNanos += hsvResult.getRight(); - - Pair, Long> findContoursResult = findContoursPipe.run(hsvResult.getLeft()); - totalPipelineTimeNanos += findContoursResult.getRight(); - - Pair, Long> filterContoursResult = filterContoursPipe.run(findContoursResult.getLeft()); - totalPipelineTimeNanos += filterContoursResult.getRight(); - - Pair, Long> speckleRejectResult = speckleRejectPipe.run(filterContoursResult.getLeft()); - totalPipelineTimeNanos += speckleRejectResult.getRight(); - - Pair, Long> groupContoursResult = groupContoursPipe.run(speckleRejectResult.getLeft()); - totalPipelineTimeNanos += groupContoursResult.getRight(); - - Pair, Long> sortContoursResult = sortContoursPipe.run(groupContoursResult.getLeft()); - totalPipelineTimeNanos += sortContoursResult.getRight(); - - Pair, Long> collect2dTargetsResult = collect2dTargetsPipe.run(Pair.of(sortContoursResult.getLeft(), camProps)); - totalPipelineTimeNanos += collect2dTargetsResult.getRight(); - - // takes pair of (Mat of original camera image (8UC3), Mat of HSV thresholded image(8UC1)) - Pair outputMatResult = outputMatPipe.run(Pair.of(rawCameraMat, hsvResult.getLeft())); - totalPipelineTimeNanos += outputMatResult.getRight(); - - Pair result; - - if (!settings.is3D) { - // takes pair of (Mat to draw on, List of sorted contours) - result = draw2dContoursPipe.run(Pair.of(outputMatResult.getLeft(), sortContoursResult.getLeft())); - totalPipelineTimeNanos += result.getRight(); - } else { - result = outputMatResult; - } - - // takes pair of (Mat to draw on, List of sorted contours) - Pair draw2dCrosshairResult = draw2dCrosshairPipe.run(Pair.of(result.getLeft(), collect2dTargetsResult.getLeft())); - totalPipelineTimeNanos += draw2dCrosshairResult.getRight(); - - Mat outputMat; - - if (settings.is3D) { - // once we've sorted our targets, perform solvePNP. The number of "best targets" is limited by the above pipe - Pair, Long> solvePNPResult = solvePNPPipe.run(Pair.of(collect2dTargetsResult.getLeft(), rotateFlipResult.getLeft())); - totalPipelineTimeNanos += solvePNPResult.getRight(); - - Pair draw3dContoursResult = drawSolvePNPPipe.run(Pair.of(outputMatResult.getLeft(), solvePNPResult.getLeft())); - totalPipelineTimeNanos += draw3dContoursResult.getRight(); - - outputMat = draw3dContoursResult.getLeft(); - } else { - outputMat = draw2dCrosshairResult.getLeft(); - } - - if (Main.testMode) { - pipelineTimeString += String.format("PipeInit: %.2fms, ", pipeInitTimeNanos / 1000000.0); - pipelineTimeString += String.format("RotateFlip: %.2fms, ", rotateFlipResult.getRight() / 1000000.0); -// pipelineTimeString += String.format("Blur: %.2fms, ", blurResult.getRight() / 1000000.0); - pipelineTimeString += String.format("ErodeDilate: %.2fms, ", erodeDilateResult.getRight() / 1000000.0); - pipelineTimeString += String.format("HSV: %.2fms, ", hsvResult.getRight() / 1000000.0); - pipelineTimeString += String.format("FindContours: %.2fms, ", findContoursResult.getRight() / 1000000.0); - pipelineTimeString += String.format("FilterContours: %.2fms, ", filterContoursResult.getRight() / 1000000.0); - pipelineTimeString += String.format("SpeckleReject: %.2fms, ", speckleRejectResult.getRight() / 1000000.0); - pipelineTimeString += String.format("GroupContours: %.2fms, ", groupContoursResult.getRight() / 1000000.0); - pipelineTimeString += String.format("SortContours: %.2fms, ", sortContoursResult.getRight() / 1000000.0); - pipelineTimeString += String.format("Collect2dTargets: %.2fms, ", collect2dTargetsResult.getRight() / 1000000.0); - pipelineTimeString += String.format("OutputMat: %.2fms, ", outputMatResult.getRight() / 1000000.0); - pipelineTimeString += String.format("Draw2dContours: %.2fms, ", result.getRight() / 1000000.0); - pipelineTimeString += String.format("Draw2dCrosshair: %.2fms, ", draw2dCrosshairResult.getRight() / 1000000.0); - - System.out.println(pipelineTimeString); - double totalPipelineTimeMillis = totalPipelineTimeNanos / 1000000.0; - double totalPipelineTimeFPS = 1.0 / (totalPipelineTimeMillis / 1000.0); - double truePipelineTimeMillis = (System.nanoTime() - pipelineStartTimeNanos) / 1000000.0; - double truePipelineFPS = 1.0 / (truePipelineTimeMillis / 1000.0); - System.out.printf("Pipeline processed in %.3fms (%.2fFPS), ", totalPipelineTimeMillis, totalPipelineTimeFPS); - System.out.printf("full pipeline run time was %.3fms (%.2fFPS)\n", truePipelineTimeMillis, truePipelineFPS); - } - -// memManager.run(); - - resultCache = new StandardCVPipelineResult(collect2dTargetsResult.getLeft(), outputMat, totalPipelineTimeNanos); - return resultCache; - } - - public static class StandardCVPipelineResult extends CVPipelineResult { - public StandardCVPipelineResult(List targets, Mat outputMat, long processTimeNanos) { - super(targets, outputMat, processTimeNanos); - } - - public void release() { - targets.forEach(TrackedTarget::release); - outputMat.release(); - } - } - - public static class TrackedTarget { - public double calibratedX = 0.0; - public double calibratedY = 0.0; - public double pitch = 0.0; - public double yaw = 0.0; - public double area = 0.0; - public Point point = new Point(); - public RotatedRect minAreaRect; - public Rect boundingRect; - - // 3d stuff - public Pose2d cameraRelativePose = new Pose2d(); - public Mat rVector = new Mat(); - public Mat tVector = new Mat(); - public MatOfPoint2f imageCornerPoints = new MatOfPoint2f(); - public Pair leftRightDualTargetPair = null; - public Pair leftRightRotatedRect = null; - public MatOfPoint2f rawContour = kMat2f; - public MatOfPoint2f approxPoly = new MatOfPoint2f(); - - public void release() { - rVector.release(); - tVector.release(); - imageCornerPoints.release(); - } - - private static final MatOfPoint2f kMat2f = new MatOfPoint2f(); - } - - -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipelineSettings.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipelineSettings.java deleted file mode 100644 index c58494850..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/StandardCVPipelineSettings.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.chameleonvision.vision.pipeline.impl; - -import com.chameleonvision.vision.enums.*; -import com.chameleonvision.vision.pipeline.CVPipelineSettings; -import com.fasterxml.jackson.annotation.JsonIgnore; -import edu.wpi.first.wpilibj.util.Units; -import org.opencv.core.*; - -import java.util.Arrays; -import java.util.List; - -public class StandardCVPipelineSettings extends CVPipelineSettings { - public List hue = Arrays.asList(50, 180); - public List saturation = Arrays.asList(50, 255); - public List value = Arrays.asList(50, 255); - public boolean erode = false; - public boolean dilate = false; - public List area = Arrays.asList(0.0, 100.0); - public List ratio = Arrays.asList(0.0, 20.0); - public List extent = Arrays.asList(0.0, 100.0); - public Number speckle = 5; - public boolean isBinary = false; - public SortMode sortMode = SortMode.Largest; - public TargetRegion targetRegion = TargetRegion.Center; - public TargetOrientation targetOrientation = TargetOrientation.Landscape; - public boolean multiple = false; - public TargetGroup targetGroup = TargetGroup.Single; - public TargetIntersection targetIntersection = TargetIntersection.Up; - public List point = Arrays.asList(0, 0); - public CalibrationMode calibrationMode = CalibrationMode.None; - public double dualTargetCalibrationM = 1; - public double dualTargetCalibrationB = 0; - - // 3d stuff - public MatOfPoint3f targetCornerMat = new MatOfPoint3f(); - public Number accuracy = 5; - private static MatOfPoint3f hexTargetMat = new MatOfPoint3f(); - - static { - hexTargetMat.fromList(List.of( - new Point3(-19.625, 0, 0), - new Point3(-9.819867, -17, 0), - new Point3(9.819867, -17, 0), - new Point3(19.625, 0, 0))); - } - - public StandardCVPipelineSettings() { - super(); - hexTargetMat.copyTo(targetCornerMat); - } - - - public boolean is3D = false; -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/BlurPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/BlurPipe.java deleted file mode 100644 index 95f99b7be..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/BlurPipe.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; - -public class BlurPipe implements Pipe { - - private int blurSize; - - private Mat processBuffer = new Mat(); - private Mat outputMat = new Mat(); - - public BlurPipe(int blurSize) { - this.blurSize = blurSize; - } - - public void setConfig(int blurSize) { - this.blurSize = blurSize; - } - - @Override - public Pair run(Mat input) { - long processStartNanos = System.nanoTime(); - -// if (blurSize > 0) { -// input.copyTo(processBuffer); -// try { -// Imgproc.blur(processBuffer, processBuffer, new Size(blurSize, blurSize)); -// processBuffer.copyTo(outputMat); -// processBuffer.release(); -// } catch (CvException e) { -// System.err.println("(BlurPipe) Exception thrown by OpenCV: \n" + e.getMessage()); -// } -// } else { -// input.copyTo(outputMat); -// } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(input, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java deleted file mode 100644 index 802e34fb5..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.enums.TargetOrientation; -import com.chameleonvision.vision.enums.TargetRegion; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.math3.util.FastMath; -import org.opencv.core.Point; - -import java.util.ArrayList; -import java.util.List; - -public class Collect2dTargetsPipe implements Pipe, CaptureStaticProperties>, List> { - - - private CaptureStaticProperties camProps; - private CalibrationMode calibrationMode; - private List calibrationPoint; - private double calibrationM, calibrationB; - private TargetRegion targetRegion; - private TargetOrientation targetOrientation; - private List targets = new ArrayList<>(); - private Point[] vertices = new Point[4]; - - public Collect2dTargetsPipe(CalibrationMode calibrationMode, TargetRegion targetRegion, TargetOrientation targetOrientation, List calibrationPoint, double calibrationM, double calibrationB, CaptureStaticProperties camProps) { - setConfig(calibrationMode, targetRegion, targetOrientation, calibrationPoint, calibrationM, calibrationB, camProps); - } - - public void setConfig(CalibrationMode calibrationMode, TargetRegion targetRegion, TargetOrientation targetOrientation, List calibrationPoint, double calibrationM, double calibrationB, CaptureStaticProperties camProps) { - this.calibrationMode = calibrationMode; - this.calibrationPoint = calibrationPoint; - this.calibrationM = calibrationM; - this.calibrationB = calibrationB; - this.camProps = camProps; - this.targetRegion = targetRegion; - this.targetOrientation = targetOrientation; - } - - @Override - public Pair, Long> run(Pair, CaptureStaticProperties> inputPair) { - long processStartNanos = System.nanoTime(); - - targets.clear(); - var input = inputPair.getLeft(); - var imageArea = inputPair.getRight().imageArea; - - if (input.size() > 0) { - for (var t : input) { - t.minAreaRect.points(vertices); - Point bl = getMiddle(vertices[0], vertices[1]); - Point tl = getMiddle(vertices[1], vertices[2]); - Point tr = getMiddle(vertices[2], vertices[3]); - Point br = getMiddle(vertices[3], vertices[0]); - boolean orientation; - if (targetOrientation == TargetOrientation.Landscape) { - orientation = t.minAreaRect.size.width > t.minAreaRect.size.height; - } else { - orientation = t.minAreaRect.size.width < t.minAreaRect.size.height; - } - - Point result = t.minAreaRect.center; - switch (this.targetRegion) { - case Top: { - result = orientation ? tl : tr; - break; - } - case Bottom: { - result = orientation ? br : bl; - break; - } - case Left: { - result = orientation ? bl : tl; - break; - } - case Right: { - result = orientation ? tr : br; - break; - } - } - t.point = result; - - switch (this.calibrationMode) { - case Single: - if (this.calibrationPoint.isEmpty()) { - this.calibrationPoint.add(camProps.centerX); - this.calibrationPoint.add(camProps.centerY); - } - t.calibratedX = this.calibrationPoint.get(0).doubleValue(); - t.calibratedY = this.calibrationPoint.get(1).doubleValue(); - break; - case None: - t.calibratedX = camProps.centerX; - t.calibratedY = camProps.centerY; - break; - case Dual: - t.calibratedX = (t.point.x - this.calibrationB) / this.calibrationM; - t.calibratedY = (t.point.y * this.calibrationM) + this.calibrationB; - break; - } - - t.pitch = calculatePitch(t.point.y, t.calibratedY); - t.yaw = calculateYaw(t.point.x, t.calibratedX); - t.area = t.minAreaRect.size.area() / imageArea; - - targets.add(t); - } - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(targets, processTime); - } - - private double calculatePitch(double pixelY, double centerY) { - double pitch = FastMath.toDegrees(FastMath.atan((pixelY - centerY) / camProps.verticalFocalLength)); - return (pitch * -1); - } - - private double calculateYaw(double pixelX, double centerX) { - return FastMath.toDegrees(FastMath.atan((pixelX - centerX) / camProps.horizontalFocalLength)); - } - - private Point getMiddle(Point p1, Point p2) { - return new Point(((p1.x + p2.x) / 2), ((p1.y + p2.y) / 2)); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java deleted file mode 100644 index 05c2f3329..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.util.Helpers; -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Point; -import org.opencv.core.*; -import org.opencv.imgproc.Imgproc; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; - -public class Draw2dContoursPipe implements Pipe>, Mat> { - - private final Draw2dContoursSettings settings; - private CaptureStaticProperties camProps; - - private Mat processBuffer = new Mat(); - private Mat outputMat = new Mat(); - - private Point[] vertices = new Point[4]; - private List drawnContours = new ArrayList<>(); - private MatOfPoint contour = new MatOfPoint(); - @SuppressWarnings("FieldCanBeLocal") - private Point xMax = new Point(), xMin = new Point(), yMax = new Point(), yMin = new Point(); - - - public Draw2dContoursPipe(Draw2dContoursSettings settings, CaptureStaticProperties camProps) { - this.settings = settings; - this.camProps = camProps; - } - - public void setConfig(boolean showMultiple,CaptureStaticProperties captureProps) { - settings.showMultiple = showMultiple; - camProps = captureProps; - } - - @Override - public Pair run(Pair> input) { - long processStartNanos = System.nanoTime(); - - if (settings.showCentroid || settings.showMaximumBox || settings.showRotatedBox) { -// input.getLeft().copyTo(processBuffer); -// processBuffer = input.getLeft(); - - if (input.getRight().size() > 0) { - for (int i = 0; i < input.getRight().size(); i++) { - if (i != 0 && !settings.showMultiple){ - break; - } - StandardCVPipeline.TrackedTarget target = input.getRight().get(i); - RotatedRect r = input.getRight().get(i).minAreaRect; - if (r == null) continue; - - drawnContours.forEach(Mat::release); - drawnContours.clear(); - drawnContours = new ArrayList<>(); - - r.points(vertices); - contour.fromArray(vertices); -// MatOfPoint contour = new MatOfPoint(vertices); - drawnContours.add(contour); - - - if (settings.showRotatedBox) { - Imgproc.drawContours(input.getLeft(), drawnContours, 0, Helpers.colorToScalar(settings.rotatedBoxColor), settings.boxOutlineSize); - } - - if (settings.showMaximumBox) { - Rect box = Imgproc.boundingRect(contour); - Imgproc.rectangle(input.getLeft(), new Point(box.x, box.y), new Point((box.x + box.width), (box.y + box.height)), Helpers.colorToScalar(settings.maximumBoxColor), settings.boxOutlineSize); - } - if (settings.showCentroid) { - Imgproc.circle(input.getLeft(), target.point, 3, Helpers.colorToScalar(settings.centroidColor), 2); - - } - -// contour.release(); - } - } - -// processBuffer.copyTo(outputMat); -// processBuffer.release(); - } else { -// input.getLeft().copyTo(outputMat); - } - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(input.getLeft(), processTime); - } - - public static class Draw2dContoursSettings { - public boolean showCentroid = false; - public boolean showMultiple = false; - public int boxOutlineSize = 0; - public boolean showRotatedBox = false; - public boolean showMaximumBox = false; - public Color centroidColor = Color.GREEN; - public Color rotatedBoxColor = Color.BLUE; - public Color maximumBoxColor = Color.RED; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java deleted file mode 100644 index 3f215ea38..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.util.Helpers; -import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; -import org.opencv.core.Point; -import org.opencv.imgproc.Imgproc; - -import java.awt.*; -import java.util.List; - -public class Draw2dCrosshairPipe implements Pipe>, Mat> { - - //Settings - private Draw2dCrosshairPipeSettings crosshairSettings; - private CalibrationMode calibrationMode; - private List calibrationPoint; - private double calibrationM, calibrationB; - - - private Point xMax = new Point(), xMin = new Point(), yMax = new Point(), yMin = new Point(); - - public Draw2dCrosshairPipe(Draw2dCrosshairPipeSettings crosshairSettings, CalibrationMode calibrationMode, List calibrationPoint, double calibrationM, double calibrationB) { - setConfig(crosshairSettings, calibrationMode, calibrationPoint, calibrationM, calibrationB); - } - - public void setConfig(Draw2dCrosshairPipeSettings crosshairSettings, CalibrationMode calibrationMode, List calibrationPoint, double calibrationM, double calibrationB) { - this.crosshairSettings = crosshairSettings; - this.calibrationMode = calibrationMode; - this.calibrationPoint = calibrationPoint; - this.calibrationM = calibrationM; - this.calibrationB = calibrationB; - } - - @Override - public Pair run(Pair> inputPair) { - long processStartNanos = System.nanoTime(); - Mat image = inputPair.getLeft(); - List targets = inputPair.getRight(); - double x = 0, y = 0, scale = image.cols() / 32.0; - - drawCrosshair: - if (this.crosshairSettings.showCrosshair) { - x = image.cols() / 2; - y = image.rows() / 2; - switch (this.calibrationMode) { - case Single: - if(this.calibrationPoint.isEmpty()) - { - this.calibrationPoint.add(x); - this.calibrationPoint.add(y); - } - x = this.calibrationPoint.get(0).intValue(); - y = this.calibrationPoint.get(1).intValue(); - break; - case Dual: -// if (targets != null && !targets.isEmpty()) { -// x = targets.get(0).calibratedX; -// y = targets.get(0).calibratedY; -// //TODO dual point calibration crosshair checks -// } else -// break drawCrosshair; - break; - } - xMax.set(new double[]{x + scale, y}); - xMin.set(new double[]{x - scale, y}); - yMax.set(new double[]{x, y + scale}); - yMin.set(new double[]{x, y - scale}); - Imgproc.line(inputPair.getLeft(), xMax, xMin, Helpers.colorToScalar(this.crosshairSettings.crosshairColor), 2); - Imgproc.line(inputPair.getLeft(), yMax, yMin, Helpers.colorToScalar(this.crosshairSettings.crosshairColor), 2); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(inputPair.getLeft(), processTime); - } - - public static class Draw2dCrosshairPipeSettings { - public boolean showCrosshair = true; - public Color crosshairColor = Color.GREEN; - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/DrawSolvePNPPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/DrawSolvePNPPipe.java deleted file mode 100644 index 92abe3a8a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/DrawSolvePNPPipe.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.util.Helpers; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.calib3d.Calib3d; -import org.opencv.core.*; -import org.opencv.core.Point; -import org.opencv.imgproc.Imgproc; - -import java.awt.*; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class DrawSolvePNPPipe implements Pipe>, Mat> { - - private MatOfPoint3f boxCornerMat = new MatOfPoint3f(); - - public Scalar green = Helpers.colorToScalar(Color.GREEN); - public Scalar blue = Helpers.colorToScalar(Color.BLUE); - public Scalar red = Helpers.colorToScalar(Color.RED); - public Scalar orange = Helpers.colorToScalar(Color.orange); - - public DrawSolvePNPPipe(StandardCVPipelineSettings standardCVPipelineSettings, CameraCalibrationConfig settings) { - setConfig(settings); - setBox(standardCVPipelineSettings.targetCornerMat); - } - - - private void setBox(MatOfPoint3f mat) { - boxCornerMat.release(); - var list = mat.toList(); - var auxList = list.stream().map(it -> new Point3(it.x, it.y, it.z + 6)).collect(Collectors.toList()); - var finalList = new ArrayList<>(list); - finalList.addAll(auxList); - boxCornerMat.fromList(finalList); - } - - - public void setConfig(StandardCVPipelineSettings settings) { - setBox(settings.targetCornerMat); - } - - private Mat cameraMatrix = new Mat(); - private MatOfDouble distortionCoefficients = new MatOfDouble(); - - public void setConfig(CameraCalibrationConfig config) { - if (config == null) { - System.err.println("got passed a null config! Returning..."); - return; - } - setConfig(config.getCameraMatrixAsMat(), config.getDistortionCoeffsAsMat()); - } - - public void setConfig(Mat cameraMatrix_, MatOfDouble distortionMatrix_) { - this.cameraMatrix = cameraMatrix_; - this.distortionCoefficients = distortionMatrix_; - } - - MatOfPoint2f imagePoints = new MatOfPoint2f(); - - @Override - public Pair run(Pair> targets) { - long processStartNanos = System.nanoTime(); - - var image = targets.getLeft(); - for (var it : targets.getRight()) { - - try { - Calib3d.projectPoints(boxCornerMat, it.rVector, it.tVector, this.cameraMatrix, this.distortionCoefficients, imagePoints, new Mat(), 0); - } catch (Exception e) { - e.printStackTrace(); - } - var pts = imagePoints.toList(); - - // draw left and right targets if possible - if (it.leftRightDualTargetPair != null) { - var left = it.leftRightDualTargetPair.getLeft(); - var right = it.leftRightDualTargetPair.getRight(); - Imgproc.rectangle(image, left.tl(), left.br(), new Scalar(200, 200, 0), 4); - Imgproc.rectangle(image, right.tl(), right.br(), new Scalar(200, 200, 0), 2); - } - - // draw poly dp - var list = it.approxPoly.toList(); - for (int i = 0; i < list.size(); i++) { - var next = (i == list.size() - 1) ? list.get(0) : list.get(i + 1); - Imgproc.line(image, list.get(i), next, red, 2); - } - - // draw center - Imgproc.circle(image, it.minAreaRect.center, 5, red); - - // draw corners - for (int i = 0; i < it.imageCornerPoints.rows(); i++) { - var point = new Point(it.imageCornerPoints.get(i, 0)); - Imgproc.circle(image, point, 4, green, 5); - } - - // sketch out floor - Imgproc.line(image, pts.get(0), pts.get(1), green, 3); - Imgproc.line(image, pts.get(1), pts.get(2), green, 3); - Imgproc.line(image, pts.get(2), pts.get(3), green, 3); - Imgproc.line(image, pts.get(3), pts.get(0), green, 3); - - // draw pillars - Imgproc.line(image, pts.get(0), pts.get(4), blue, 3); - Imgproc.line(image, pts.get(1), pts.get(5), blue, 3); - Imgproc.line(image, pts.get(2), pts.get(6), blue, 3); - Imgproc.line(image, pts.get(3), pts.get(7), blue, 3); - - // draw top - Imgproc.line(image, pts.get(4), pts.get(5), red, 3); - Imgproc.line(image, pts.get(5), pts.get(6), red, 3); - Imgproc.line(image, pts.get(6), pts.get(7), red, 3); - Imgproc.line(image, pts.get(7), pts.get(4), red, 3); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(image, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java deleted file mode 100644 index 2d5034118..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/ErodeDilatePipe.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; -import org.opencv.core.Size; -import org.opencv.imgproc.Imgproc; - -public class ErodeDilatePipe implements Pipe { - - private boolean erode; - private boolean dilate; - private Mat kernel; - - public ErodeDilatePipe(boolean erode, boolean dilate, int kernelSize) { - this.erode = erode; - this.dilate = dilate; - kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(kernelSize, kernelSize)); - } - - public void setConfig(boolean erode, boolean dilate, int kernelSize) { - this.erode = erode; - this.dilate = dilate; - kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(kernelSize, kernelSize)); - } - - @Override - public Pair run(Mat input) { - long processStartNanos = System.nanoTime(); - - if (erode || dilate) { -// input.copyTo(processBuffer); - - if (erode) { - Imgproc.erode(input, input, kernel); - } - - if (dilate) { - Imgproc.dilate(input, input, kernel); - } - -// processBuffer.copyTo(outputMat); -// processBuffer.release(); - } else { -// input.copyTo(outputMat); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(input, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FilterContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FilterContoursPipe.java deleted file mode 100644 index 1ac8beb7a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FilterContoursPipe.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.util.MathHandler; -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.MatOfPoint; -import org.opencv.core.MatOfPoint2f; -import org.opencv.core.Rect; -import org.opencv.imgproc.Imgproc; - -import java.util.ArrayList; -import java.util.List; - -public class FilterContoursPipe implements Pipe, List> { - - private List area; - private List ratio; - private List extent; - private CaptureStaticProperties camProps; - - private List filteredContours = new ArrayList<>(); - - public FilterContoursPipe(List area, List ratio, List extent, CaptureStaticProperties camProps) { - this.area = area; - this.ratio = ratio; - this.extent = extent; - this.camProps = camProps; - } - - public void setConfig(List area, List ratio, List extent, CaptureStaticProperties camProps) { - this.area = area; - this.ratio = ratio; - this.extent = extent; - this.camProps = camProps; - } - - @Override - public Pair, Long> run(List input) { - long processStartNanos = System.nanoTime(); - - filteredContours.clear(); - - if (input.size() > 0) { - for (MatOfPoint Contour : input) { - try { - double contourArea = Imgproc.contourArea(Contour); - double AreaRatio = (contourArea / camProps.imageArea) * 100; - double minArea = (MathHandler.sigmoid(area.get(0))); - double maxArea = (MathHandler.sigmoid(area.get(1))); - if (AreaRatio < minArea || AreaRatio > maxArea) { - continue; - } - var rect = Imgproc.minAreaRect(new MatOfPoint2f(Contour.toArray())); - double minExtent = (extent.get(0).doubleValue() * rect.size.area()) / 100; - double maxExtent = (extent.get(1).doubleValue() * rect.size.area()) / 100; - if (contourArea <= minExtent || contourArea >= maxExtent) { - continue; - } - Rect bb = Imgproc.boundingRect(Contour); - double aspectRatio = ((double)bb.width / bb.height); - if (aspectRatio < ratio.get(0).doubleValue() || aspectRatio > ratio.get(1).doubleValue()) { - continue; - } - filteredContours.add(Contour); - } catch (Exception e) { - System.err.println("Error while filtering contours"); - e.printStackTrace(); - } - } - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(filteredContours, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FindContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FindContoursPipe.java deleted file mode 100644 index e2426dbb5..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/FindContoursPipe.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Mat; -import org.opencv.core.MatOfPoint; -import org.opencv.imgproc.Imgproc; - -import java.util.ArrayList; -import java.util.List; - -public class FindContoursPipe implements Pipe> { - - private List foundContours = new ArrayList<>(); - - public FindContoursPipe() {} - - @Override - public Pair, Long> run(Mat input) { - long processStartNanos = System.nanoTime(); - - foundContours.clear(); - - Imgproc.findContours(input, foundContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1); - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(foundContours, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/GroupContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/GroupContoursPipe.java deleted file mode 100644 index c0852663f..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/GroupContoursPipe.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.util.MathHandler; -import com.chameleonvision.vision.enums.TargetGroup; -import com.chameleonvision.vision.enums.TargetIntersection; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.*; -import org.opencv.imgproc.Imgproc; -import org.opencv.imgproc.Moments; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class GroupContoursPipe implements Pipe, List> { - - private static final Comparator sortByMomentsX = - Comparator.comparingDouble(GroupContoursPipe::calcMomentsX); - - private TargetGroup group; - private TargetIntersection intersection; - - private MatOfPoint2f contourBuffer = new MatOfPoint2f(); - - private List groupedContours = new ArrayList<>(); - private MatOfPoint2f intersectMatA = new MatOfPoint2f(); - private MatOfPoint2f intersectMatB = new MatOfPoint2f(); - - public GroupContoursPipe(TargetGroup group, TargetIntersection intersection) { - this.group = group; - this.intersection = intersection; - } - - public void setConfig(TargetGroup group, TargetIntersection intersection) { - this.group = group; - this.intersection = intersection; - } - - @Override - public Pair, Long> run(List input) { - long processStartNanos = System.nanoTime(); - - groupedContours.forEach(StandardCVPipeline.TrackedTarget::release); - groupedContours.clear(); - contourBuffer.release(); - - if (input.size() > (group.equals(TargetGroup.Single) ? 0 : 1)) { - - List sorted = new ArrayList<>(input); - sorted.sort(sortByMomentsX); - - Collections.reverse(sorted); - - switch (group) { - case Single: { - input.forEach(c -> { - contourBuffer.fromArray(c.toArray()); - if (contourBuffer.cols() != 0 && contourBuffer.rows() != 0) { - RotatedRect rect = Imgproc.minAreaRect(contourBuffer); - Rect boundingRect = Imgproc.boundingRect(contourBuffer); - var target = new StandardCVPipeline.TrackedTarget(); - target.minAreaRect = rect; - target.rawContour = contourBuffer; - target.boundingRect = boundingRect; - groupedContours.add(target); - } - }); - break; - } - case Dual: { - for (var i = 0; i < input.size(); i++) { - List finalContourList = new ArrayList<>(input.get(i).toList()); - - try { - MatOfPoint firstContour = input.get(i); - MatOfPoint secondContour = input.get(i + 1); - - if (isIntersecting(firstContour, secondContour)) { - finalContourList.addAll(secondContour.toList()); - } else { - finalContourList.clear(); - continue; - } - - intersectMatA.release(); - intersectMatB.release(); - - contourBuffer.fromList(finalContourList); - - if (contourBuffer.cols() != 0 && contourBuffer.rows() != 0) { - RotatedRect rect = Imgproc.minAreaRect(contourBuffer); - Rect boundingRect = Imgproc.boundingRect(contourBuffer); - var target = new StandardCVPipeline.TrackedTarget(); - target.minAreaRect = rect; - target.boundingRect = boundingRect; - // find left and right bouding rectangles - target.leftRightDualTargetPair = - Pair.of(Imgproc.boundingRect(firstContour), - Imgproc.boundingRect(secondContour)); - - // find left and right min area rectangles - tempRectMat.fromArray(firstContour.toArray()); - var minAreaRect1 = Imgproc.minAreaRect(tempRectMat); - tempRectMat.fromArray(secondContour.toArray()); - var minAreaRect2 = Imgproc.minAreaRect(tempRectMat); - target.leftRightRotatedRect = - Pair.of(minAreaRect1, minAreaRect2); - - target.rawContour = contourBuffer; - - groupedContours.add(target); - - firstContour.release(); - secondContour.release(); - - // skip the next contour because it's been grouped already - i += 1; - } - } catch (IndexOutOfBoundsException e) { - finalContourList.clear(); - } - } - break; - } - } - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(groupedContours, processTime); - } - - MatOfPoint2f tempRectMat = new MatOfPoint2f(); - - private static double calcMomentsX(MatOfPoint c) { - Moments m = Imgproc.moments(c); - return (m.get_m10() / m.get_m00()); - } - - private boolean isIntersecting(MatOfPoint contourOne, MatOfPoint contourTwo) { - if (intersection.equals(TargetIntersection.None)) { - return true; - } - - try { - intersectMatA.fromArray(contourOne.toArray()); - intersectMatB.fromArray(contourTwo.toArray()); - RotatedRect a = Imgproc.fitEllipse(intersectMatA); - RotatedRect b = Imgproc.fitEllipse(intersectMatB); - double mA = MathHandler.toSlope(a.angle); - double mB = MathHandler.toSlope(b.angle); - double x0A = a.center.x; - double y0A = a.center.y; - double x0B = b.center.x; - double y0B = b.center.y; - double intersectionX = ((mA * x0A) - y0A - (mB * x0B) + y0B) / (mA - mB); - double intersectionY = (mA * (intersectionX - x0A)) + y0A; - double massX = (x0A + x0B) / 2; - double massY = (y0A + y0B) / 2; - switch (intersection) { - case Up: { - if (intersectionY < massY) { - return true; - } - break; - } - case Down: { - if (intersectionY > massY) { - return true; - } - - break; - } - case Left: { - if (intersectionX < massX) { - - return true; - } - break; - } - case Right: { - if (intersectionX > massX) { - return true; - } - break; - } - } - return false; - } catch (Exception e) { - return false; - } - } -} \ No newline at end of file diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java deleted file mode 100644 index 9bdefea44..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/HsvPipe.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Core; -import org.opencv.core.CvException; -import org.opencv.core.Mat; -import org.opencv.core.Scalar; -import org.opencv.imgproc.Imgproc; - -public class HsvPipe implements Pipe { - - private Scalar hsvLower; - private Scalar hsvUpper; - - private Mat processBuffer = new Mat(); - private Mat outputMat = new Mat(); - - public HsvPipe(Scalar hsvLower, Scalar hsvUpper) { - this.hsvLower = hsvLower; - this.hsvUpper = hsvUpper; - } - - public void setConfig(Scalar hsvLower, Scalar hsvUpper) { - this.hsvLower = hsvLower; - this.hsvUpper = hsvUpper; - } - - @Override - public Pair run(Mat input) { - long processStartNanos = System.nanoTime(); - - input.copyTo(outputMat); - - try { - Imgproc.cvtColor(outputMat, outputMat, Imgproc.COLOR_BGR2HSV, 3); - Core.inRange(outputMat, hsvLower, hsvUpper, outputMat); - } catch (CvException e) { - System.err.println("(HsvPipe) Exception thrown by OpenCV: \n" + e.getMessage()); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(outputMat, processTime); - } -} - diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/OutputMatPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/OutputMatPipe.java deleted file mode 100644 index da1612497..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/OutputMatPipe.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.CvException; -import org.opencv.core.Mat; -import org.opencv.imgproc.Imgproc; - -public class OutputMatPipe implements Pipe, Mat> { - - private boolean showThresholded; - - private Mat processBuffer = new Mat(); - private Mat outputMat = new Mat(); - - public OutputMatPipe(boolean showThresholded) { - this.showThresholded = showThresholded; - } - - public void setConfig(boolean showThresholded) { - this.showThresholded = showThresholded; - } - - /** - * - * @param input Input object for pipe - * Left is raw camera mat (8UC3), Right is HSV threshold mat (8UC1) - * @return Returns desired output Mat, and processing time in nanoseconds - */ - @Override - public Pair run(Pair input) { - long processStartNanos = System.nanoTime(); - - if (showThresholded) { - try { - input.getRight().copyTo(processBuffer); - Imgproc.cvtColor(processBuffer, processBuffer, Imgproc.COLOR_GRAY2BGR, 3); - processBuffer.copyTo(outputMat); - processBuffer.release(); - } catch (CvException e) { - System.err.println("(OutputMat) Exception thrown by OpenCV: \n" + e.getMessage()); - } - } else { - input.getLeft().copyTo(outputMat); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(outputMat, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java deleted file mode 100644 index 36e52f37b..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/RotateFlipPipe.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.enums.ImageFlipMode; -import com.chameleonvision.vision.enums.ImageRotationMode; -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.Core; -import org.opencv.core.Mat; - -public class RotateFlipPipe implements Pipe { - - private ImageRotationMode rotation; - private ImageFlipMode flip; - - private Mat processBuffer = new Mat(); - private Mat outputMat = new Mat(); - - public RotateFlipPipe(ImageRotationMode rotation, ImageFlipMode flip) { - this.rotation = rotation; - this.flip = flip; - } - - public void setConfig(ImageRotationMode rotation, ImageFlipMode flip) { - this.rotation = rotation; - this.flip = flip; - } - - @Override - public Pair run(Mat input) { - long processStartNanos = System.nanoTime(); - - boolean shouldFlip = !flip.equals(ImageFlipMode.NONE); - boolean shouldRotate = !rotation.equals(ImageRotationMode.DEG_0); - - if (shouldFlip || shouldRotate) { -// input.copyTo(processBuffer); - - if (shouldFlip) { - Core.flip(input, input, flip.value); - } - - if (shouldRotate) { - Core.rotate(input, input, rotation.value); - } - -// processBuffer.copyTo(outputMat); -// processBuffer.release(); - } else { -// input.copyTo(outputMat); - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(input, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SolvePNPPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SolvePNPPipe.java deleted file mode 100644 index f29dc932a..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SolvePNPPipe.java +++ /dev/null @@ -1,445 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import edu.wpi.first.networktables.NetworkTableEntry; -import edu.wpi.first.networktables.NetworkTableInstance; -import edu.wpi.first.wpilibj.geometry.Pose2d; -import edu.wpi.first.wpilibj.geometry.Rotation2d; -import edu.wpi.first.wpilibj.geometry.Translation2d; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.math3.util.FastMath; -import org.opencv.calib3d.Calib3d; -import org.opencv.core.*; -import org.opencv.imgproc.Imgproc; - -import java.util.*; -import java.util.stream.Collectors; - -public class SolvePNPPipe implements Pipe, Mat>, List> { - - private Double tilt_angle; - private MatOfPoint3f objPointsMat = new MatOfPoint3f(); - private Mat rVec = new Mat(); - private Mat tVec = new Mat(); - private Mat rodriguez = new Mat(); - private Mat pzero_world = new Mat(); - private Mat cameraMatrix = new Mat(); - Mat rot_inv = new Mat(); - Mat kMat = new Mat(); - private MatOfDouble distortionCoefficients = new MatOfDouble(); - private List poseList = new ArrayList<>(); - Comparator leftRightComparator = Comparator.comparingDouble(point -> point.x); - Comparator verticalComparator = Comparator.comparingDouble(point -> point.y); - private double distanceDivisor = 1.0; - Mat scaledTvec = new Mat(); - MatOfPoint2f boundingBoxResultMat = new MatOfPoint2f(); - MatOfPoint2f polyOutput = new MatOfPoint2f(); - private Mat greyImg = new Mat(); - private double accuracyPercentage = 0.2; - - public SolvePNPPipe(StandardCVPipelineSettings settings, CameraCalibrationConfig calibration, Rotation2d tilt) { - super(); - setCameraCoeffs(calibration); -// setBoundingBoxTarget(settings.targetWidth, settings.targetHeight); - // TODO add proper year differentiation - set2020Target(true); - - this.tilt_angle = tilt.getRadians(); - } - - public void set2020Target(boolean isHighGoal) { - if(isHighGoal) { - // tl, bl, br, tr is the order - List corners = List.of( - - new Point3(-19.625, 0, 0), - new Point3(-9.819867, -17, 0), - new Point3(9.819867, -17, 0), - new Point3(19.625, 0, 0)); - setObjectCorners(corners); - } else { - setBoundingBoxTarget(7, 11); - } - } - - public void setBoundingBoxTarget(double targetWidth, double targetHeight) { - // order is left top, left bottom, right bottom, right top - - List corners = List.of( - new Point3(-targetWidth / 2.0, targetHeight / 2.0, 0.0), - new Point3(-targetWidth / 2.0, -targetHeight / 2.0, 0.0), - new Point3(targetWidth / 2.0, -targetHeight / 2.0, 0.0), - new Point3(targetWidth / 2.0, targetHeight / 2.0, 0.0) - ); - setObjectCorners(corners); - } - - public void setObjectCorners(List objectCorners) { - objPointsMat.release(); - objPointsMat = new MatOfPoint3f(); - objPointsMat.fromList(objectCorners); - } - - public void setConfig(StandardCVPipelineSettings settings, CameraCalibrationConfig camConfig, Rotation2d tilt) { - setCameraCoeffs(camConfig); -// setBoundingBoxTarget(settings.targetWidth, settings.targetHeight); - // TODO add proper year differentiation - tilt_angle = tilt.getRadians(); - this.objPointsMat = settings.targetCornerMat; - this.accuracyPercentage = settings.accuracy.doubleValue(); - } - - private void setCameraCoeffs(CameraCalibrationConfig settings) { - if(settings == null) { - System.err.println("SolvePNP can only run on a calibrated resolution, and this one is not! Please calibrate to use solvePNP."); - return; - } - if(cameraMatrix != settings.getCameraMatrixAsMat()) { - cameraMatrix.release(); - settings.getCameraMatrixAsMat().copyTo(cameraMatrix); - } - if(distortionCoefficients != settings.getDistortionCoeffsAsMat()) { - distortionCoefficients.release(); - settings.getDistortionCoeffsAsMat().copyTo(distortionCoefficients); - } - this.distanceDivisor = settings.squareSize; - } - - @Override - public Pair, Long> run(Pair, Mat> imageTargetPair) { - long processStartNanos = System.nanoTime(); - var targets = imageTargetPair.getLeft(); - var image = imageTargetPair.getRight(); - Imgproc.cvtColor(image, greyImg, Imgproc.COLOR_BGR2GRAY); - poseList.clear(); - for(var target: targets) { - MatOfPoint2f corners; - if(target.leftRightRotatedRect == null) { - corners = find2020VisionTarget(target, accuracyPercentage);//, imageTargetPair.getRight()); //find2020VisionTarget(target);// (target.leftRightDualTargetPair != null) ? findCorner2019(target) : findBoundingBoxCorners(target); - } else { - corners = findCorner2019(target); - } -// var corners = findCorner2019(target); - if(corners == null) continue; - -// // use best features to track -// corners = refineCornersByBestTrack(corners, greyImg, target); - - // refine the estimate -// corners = refineCornerEstimateSubPix(corners, greyImg); - - var pose = calculatePose(corners, target); - if(pose != null) poseList.add(pose); - } - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(poseList, processTime); - } - - private MatOfPoint2f findCorner2019(StandardCVPipeline.TrackedTarget target) { - if(target.leftRightDualTargetPair == null) return null; - - var left = target.leftRightDualTargetPair.getLeft(); - var right = target.leftRightDualTargetPair.getRight(); - - // flip if the "left" target is to the right - if(left.x > right.x) { - var temp = left; - left = right; - right = temp; - } - - var points = new MatOfPoint2f(); - points.fromArray( - new Point(left.x, left.y + left.height), - new Point(left.x, left.y), - new Point(right.x + right.width, right.y), - new Point(right.x + right.width, right.y + right.height) - ); - return points; - } - - MatOfPoint2f target2020ResultMat = new MatOfPoint2f(); - - private double distanceBetween(Point a, Point b) { - return FastMath.sqrt(FastMath.pow(a.x - b.x, 2) + FastMath.pow(a.y - b.y, 2)); - } - - /** - * Find the target using the outermost tape corners and a 2020 target. - * @param target the target. - * @return The four outermost tape corners. - */ - private MatOfPoint2f find2020VisionTarget(StandardCVPipeline.TrackedTarget target, double accuracyPercentage) { - if(target.rawContour.cols() < 1) return null; - - var centroid = target.minAreaRect.center; - Comparator distanceProvider = Comparator.comparingDouble((Point point) -> FastMath.sqrt(FastMath.pow(centroid.x - point.x, 2) + FastMath.pow(centroid.y - point.y, 2))); - - // algorithm from team 4915 - - // Contour perimeter - var peri = Imgproc.arcLength(target.rawContour, true); - // approximating a shape around the contours - // Can be tuned to allow/disallow hulls - // Approx is the number of vertices - // Ramer–Douglas–Peucker algorithm - // we want a number between 0 and 0.16 out of a percentage from 0 to 100 - // so take accuracy and divide by 600 - Imgproc.approxPolyDP(target.rawContour, polyOutput, accuracyPercentage / 600.0 * peri, true); - - var area = Imgproc.moments(polyOutput); - -// if (area.get_m00() < 200) { -// return null; -// } - - var polyList = polyOutput.toList(); - - polyOutput.copyTo(target.approxPoly); - - // left top, left bottom, right bottom, right top - var boundingBoxCorners = findBoundingBoxCorners(target).toList(); - - try { - - // top left and top right are the poly corners closest to the bouding box tl and tr - var tl = polyList.stream().min(Comparator.comparingDouble((Point p) -> distanceBetween(p, boundingBoxCorners.get(0)))).get(); - var tr = polyList.stream().min(Comparator.comparingDouble((Point p) -> distanceBetween(p, boundingBoxCorners.get(3)))).get(); - - var bl = polyList.stream().filter(point -> point.x < centroid.x && point.y > centroid.y).max(distanceProvider).get(); - var br = polyList.stream().filter(point -> point.x > centroid.x && point.y > centroid.y).max(distanceProvider).get(); - -// polyList = new ArrayList<>(polyList); -// polyList.removeAll(List.of(tl, tr, bl, br)); -// -// var tl2 = polyList.stream().min(Comparator.comparingDouble((Point p) -> distanceBetween(p, boundingBoxCorners.get(0)))).get(); -// var tr2 = polyList.stream().min(Comparator.comparingDouble((Point p) -> distanceBetween(p, boundingBoxCorners.get(3)))).get(); -// -// var bl2 = polyList.stream().filter(point -> point.x < centroid.x && point.y > centroid.y).max(distanceProvider).get(); -// var br2 = polyList.stream().filter(point -> point.x > centroid.x && point.y > centroid.y).max(distanceProvider).get(); - - target2020ResultMat.release(); - target2020ResultMat.fromList(List.of(tl, bl, br, tr));//, tr2, br2, bl2, tl2)); - - return target2020ResultMat; - } catch (NoSuchElementException e) { - return null; - } - } - - /** - * Find the target using the outermost tape corners and a dual target. - * @param target the target. - * @return The four outermost tape corners. - */ - private MatOfPoint2f findDualTargetCornerMinAreaRect(StandardCVPipeline.TrackedTarget target) { - if(target.leftRightRotatedRect == null) return null; - - var centroid = target.minAreaRect.center; - Comparator distanceProvider = Comparator.comparingDouble((Point point) -> FastMath.sqrt(FastMath.pow(centroid.x - point.x, 2) + FastMath.pow(centroid.y - point.y, 2))); - - var left = target.leftRightRotatedRect.getLeft(); - var right = target.leftRightRotatedRect.getRight(); - - // flip if the "left" target is to the right - if(left.center.x > right.center.x) { - var temp = left; - left = right; - right = temp; - } - - var leftPoints = new Point[4]; - left.points(leftPoints); - var rightPoints = new Point[4]; - right.points(rightPoints); - ArrayList combinedList = new ArrayList<>(List.of(leftPoints)); - combinedList.addAll(List.of(rightPoints)); - - // start looking in the top left quadrant - var tl = combinedList.stream().filter(point -> point.x < centroid.x && point.y < centroid.y).max(distanceProvider).get(); - var tr = combinedList.stream().filter(point -> point.x > centroid.x && point.y < centroid.y).max(distanceProvider).get(); - var bl = combinedList.stream().filter(point -> point.x < centroid.x && point.y > centroid.y).max(distanceProvider).get(); - var br = combinedList.stream().filter(point -> point.x > centroid.x && point.y > centroid.y).max(distanceProvider).get(); - - boundingBoxResultMat.release(); - boundingBoxResultMat.fromList(List.of(tl, bl, br, tr)); - - return boundingBoxResultMat; - } - - /** - * - * @param target the target to find the corners of. - * @return the corners. left top, left bottom, right bottom, right top - */ - private MatOfPoint2f findBoundingBoxCorners(StandardCVPipeline.TrackedTarget target) { - -// List> list = new ArrayList<>(); -// // find the corners based on the bounding box -// // order is left top, left bottom, right bottom, right top - - // extract the corners - var points = new Point[4]; - target.minAreaRect.points(points); - - // find the tl/tr/bl/br corners - // first, min by left/right - var list_ = Arrays.asList(points); - list_.sort(leftRightComparator); - // of this, we now have left and right - // sort to get top and bottom - var left = new ArrayList<>(List.of(list_.get(0), list_.get(1))); - left.sort(verticalComparator); - var right = new ArrayList<>(List.of(list_.get(2), list_.get(3))); - right.sort(verticalComparator); - - // tl tr bl br - var tl = left.get(0); - var bl = left.get(1); - var tr = right.get(0); - var br = right.get(1); - - boundingBoxResultMat.release(); - boundingBoxResultMat.fromList(List.of(tl, bl, br, tr)); - - return boundingBoxResultMat; - } - - MatOfPoint2f goodFeatureToTrackRetval = new MatOfPoint2f(); - - private MatOfPoint2f refineCornersByBestTrack(MatOfPoint2f corners, Mat greyImg, StandardCVPipeline.TrackedTarget target) { - - MatOfPoint approxf1 = new MatOfPoint(); - var origCornerList = new ArrayList<>(corners.toList()); - approxf1.fromList(origCornerList.stream() - .map(it -> new Point(it.x - target.boundingRect.x, it.y - target.boundingRect.y)) - .collect(Collectors.toList()) - ); - var croppedImage = greyImg.submat(target.boundingRect); - - Imgproc.goodFeaturesToTrack(croppedImage, approxf1, 0, 0.1, 5); - - // at this point corners is still unmodified so let's map it - List tempList = new ArrayList<>(); - - // shift all points back into global pose - var reshiftedList = approxf1.toList().stream().map(it -> new Point(it.x + target.boundingRect.x, it.y + target.boundingRect.y)) - .collect(Collectors.toList()); - for(Point p: origCornerList) { - // find the goodFeaturesToTrack corner closest to me - var closestPoint = reshiftedList.stream().min(Comparator.comparingDouble(p_ -> distanceBetween(p_, p))); - if(closestPoint.isEmpty()) { - tempList.add(p); - reshiftedList.remove(p); - } else { - tempList.add(closestPoint.get()); - reshiftedList.remove(closestPoint.get()); - } - } - - goodFeatureToTrackRetval.fromList(tempList); - return goodFeatureToTrackRetval; - } - - // Set the needed parameters to find the refined corners - Size winSize = new Size(4, 4); - Size zeroZone = new Size(-1, -1); // we don't need a zero zone - TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.COUNT, 90, 0.001); - - private boolean shouldRefineCorners = true; - - /** - * Refine an estimated corner position using the cornerSubPixel algorithm. - * - * TODO should this be here or before the points are chosen? - * - * @param corners the corners detected -- this mat is modified! - * @param greyImg the image taken by the camera as color - * @return the updated mat, same as the corner mat passed in. - */ - private MatOfPoint2f refineCornerEstimateSubPix(MatOfPoint2f corners, Mat greyImg) { - if(!shouldRefineCorners) return corners; // just return - Imgproc.cornerSubPix(greyImg, corners, winSize, zeroZone, criteria); - - return corners; - } - -// NetworkTableEntry tvecE = NetworkTableInstance.getDefault().getTable("SmartDashboard").getEntry("tvec"); -// NetworkTableEntry rvecE = NetworkTableInstance.getDefault().getTable("SmartDashboard").getEntry("rvec"); - - public StandardCVPipeline.TrackedTarget calculatePose(MatOfPoint2f imageCornerPoints, StandardCVPipeline.TrackedTarget target) { - if(objPointsMat.rows() != imageCornerPoints.rows() || cameraMatrix.rows() < 2 || distortionCoefficients.cols() < 4) { - System.err.println("can't do solvePNP with invalid params!"); - return null; - } - - imageCornerPoints.copyTo(target.imageCornerPoints); - - try { - Calib3d.solvePnP(objPointsMat, imageCornerPoints, cameraMatrix, distortionCoefficients, rVec, tVec); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - -// tvecE.setString(tVec.dump()); -// rvecE.setString(rVec.dump()); - - // Algorithm from team 5190 Green Hope Falcons - -// var tilt_angle = 0.0; // TODO add to settings - - // the left/right distance to the target, unchanged by tilt - var x = tVec.get(0, 0)[0]; - - // Z distance in the flat plane is given by - // Z_field = z cos theta + y sin theta - var z = tVec.get(2, 0)[0] * FastMath.cos(tilt_angle) + tVec.get(1, 0)[0] * FastMath.sin(tilt_angle); - - // find skew of the target relative to the camera - // from ligerbots: - // rot, _ = cv2.Rodrigues(rvec) - // rot_inv = rot.transpose() - // pzero_world = numpy.matmul(rot_inv, -tvec) - // angle2 = math.atan2(pzero_world[0][0], pzero_world[2][0] - - Calib3d.Rodrigues(rVec, rodriguez); - Core.transpose(rodriguez, rot_inv); // rodrigurz.t() - - scaledTvec = matScale(tVec, -1); - Core.gemm(rot_inv, scaledTvec, 1, kMat, 0, pzero_world); - - var angle2 = FastMath.atan2(pzero_world.get(0, 0)[0], pzero_world.get(2, 0)[0]); - - var targetRotation = -angle2; // radians - - // We want a vector that is X forward and Y left. - // We have a Z_field (out of the camera projected onto the field), and an X left/right. - // so Z_field becomes X, and X becomes Y - - //noinspection SuspiciousNameCombination - var targetLocation = new Translation2d(z, -x).times(25.4 / 1000d / distanceDivisor); - target.cameraRelativePose = new Pose2d(targetLocation, new Rotation2d(targetRotation)); - target.rVector = rVec; - target.tVector = tVec; - - return target; - } - - /** - * Element-wise scale a matrix by a given factor - * @param src the source matrix - * @param factor by how much to scale each element - * @return the scaled matrix - */ - public Mat matScale(Mat src, double factor) { - Mat dst = new Mat(src.rows(),src.cols(),src.type()); - Scalar s = new Scalar(factor); // TODO check if we need to add more elements to this - Core.multiply(src, s, dst); - return dst; - } - -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SortContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SortContoursPipe.java deleted file mode 100644 index 37fc37ffd..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SortContoursPipe.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.enums.SortMode; -import com.chameleonvision.vision.pipeline.Pipe; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.math3.util.FastMath; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -public class SortContoursPipe implements Pipe, List> { - - private final Comparator SortByCentermostComparator = Comparator.comparingDouble(this::calcSquareCenterDistance); - - private static final Comparator SortByLargestComparator = (rect1, rect2) -> Double.compare(rect2.minAreaRect.size.area(), rect1.minAreaRect.size.area()); - private static final Comparator SortBySmallestComparator = SortByLargestComparator.reversed(); - - private static final Comparator SortByHighestComparator = (rect1, rect2) -> Double.compare(rect1.minAreaRect.center.y, rect2.minAreaRect.center.y); - private static final Comparator SortByLowestComparator = SortByHighestComparator.reversed(); - - public static final Comparator SortByLeftmostComparator = Comparator.comparingDouble(target -> target.minAreaRect.center.x); - private static final Comparator SortByRightmostComparator = SortByLeftmostComparator.reversed(); - - private SortMode sort; - private CaptureStaticProperties camProps; - private int maxTargets; - - private List sortedContours = new ArrayList<>(); - - public SortContoursPipe(SortMode sort, CaptureStaticProperties camProps, int maxTargets) { - this.sort = sort; - this.camProps = camProps; - this.maxTargets = maxTargets; - } - - public void setConfig(SortMode sort, CaptureStaticProperties camProps, int maxTargets) { - this.sort = sort; - this.camProps = camProps; - this.maxTargets = maxTargets; - } - - @Override - public Pair, Long> run(List input) { - long processStartNanos = System.nanoTime(); - - sortedContours.clear(); - - if (input.size() > 0) { - sortedContours.addAll(input); - - switch (sort) { - case Largest: - sortedContours.sort(SortByLargestComparator); - break; - case Smallest: - sortedContours.sort(SortBySmallestComparator); - break; - case Highest: - sortedContours.sort(SortByHighestComparator); - break; - case Lowest: - sortedContours.sort(SortByLowestComparator); - break; - case Leftmost: - sortedContours.sort(SortByLeftmostComparator); - break; - case Rightmost: - sortedContours.sort(SortByRightmostComparator); - break; - case Centermost: - sortedContours.sort(SortByCentermostComparator); - break; - default: - break; - } - } - - var sublistedContors = new ArrayList<>(sortedContours.subList(0, Math.min(input.size(), maxTargets - 1))); - sortedContours.subList(Math.min(input.size(), maxTargets - 1), sortedContours.size()).forEach(StandardCVPipeline.TrackedTarget::release); - sortedContours.clear(); - sortedContours = new ArrayList<>(); - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(sublistedContors, processTime); - } - - private double calcSquareCenterDistance(StandardCVPipeline.TrackedTarget rect) { - return FastMath.sqrt(FastMath.pow(camProps.centerX - rect.minAreaRect.center.x, 2) + FastMath.pow(camProps.centerY - rect.minAreaRect.center.y, 2)); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SpeckleRejectPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SpeckleRejectPipe.java deleted file mode 100644 index 4e06658b0..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/SpeckleRejectPipe.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.chameleonvision.vision.pipeline.pipes; - -import com.chameleonvision.vision.pipeline.Pipe; -import org.apache.commons.lang3.tuple.Pair; -import org.opencv.core.MatOfPoint; -import org.opencv.imgproc.Imgproc; - -import java.util.ArrayList; -import java.util.List; - -public class SpeckleRejectPipe implements Pipe, List> { - - private double minPercentOfAvg; - - private List despeckledContours = new ArrayList<>(); - - public SpeckleRejectPipe(double minPercentOfAvg) { - this.minPercentOfAvg = minPercentOfAvg; - } - - public void setConfig(double minPercentOfAvg) { - this.minPercentOfAvg = minPercentOfAvg; - } - - @Override - public Pair, Long> run(List input) { - long processStartNanos = System.nanoTime(); - - despeckledContours.forEach(MatOfPoint::release); - despeckledContours.clear(); - despeckledContours = new ArrayList<>(); - - if (input.size() > 0) { - double averageArea = 0.0; - - for (MatOfPoint c : input) { - averageArea += Imgproc.contourArea(c); - } - - averageArea /= input.size(); - - double minAllowedArea = minPercentOfAvg / 100.0 * averageArea; - - for (MatOfPoint c : input) { - if (Imgproc.contourArea(c) >= minAllowedArea) { - despeckledContours.add(c); - } - } - } - - long processTime = System.nanoTime() - processStartNanos; - return Pair.of(despeckledContours, processTime); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/RequestHandler.java b/chameleon-server/src/main/java/com/chameleonvision/web/RequestHandler.java deleted file mode 100644 index 032ec6e6e..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/web/RequestHandler.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.chameleonvision.web; - -import com.chameleonvision.Exceptions.DuplicatedKeyException; -import com.chameleonvision.Main; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.network.NetworkIPMode; -import com.chameleonvision.network.NetworkManager; -import com.chameleonvision.networktables.NetworkTablesManager; -import com.chameleonvision.util.Helpers; -import com.chameleonvision.util.Platform; -import com.chameleonvision.util.ProgramDirectoryUtilities; -import com.chameleonvision.vision.VisionManager; -import com.chameleonvision.vision.VisionProcess; -import com.chameleonvision.vision.camera.USBCameraCapture; -import com.chameleonvision.vision.pipeline.PipelineManager; -import com.chameleonvision.vision.pipeline.impl.Calibrate3dPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipelineSettings; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import edu.wpi.first.wpilibj.geometry.Rotation2d; -import io.javalin.http.Context; -import io.javalin.http.UploadedFile; -import org.opencv.core.Point3; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class RequestHandler { - - private static final ObjectMapper kObjectMapper = new ObjectMapper(); - - public static void onGeneralSettings(Context ctx) { - ObjectMapper objectMapper = kObjectMapper; - try { - Map map = objectMapper.readValue(ctx.body(), Map.class); - - // TODO: change to function, to restart NetworkTables - int newTeamNumber = (int) map.get("teamNumber"); - if (newTeamNumber != ConfigManager.settings.teamNumber && !NetworkTablesManager.isServer) { - NetworkTablesManager.setTeamClientMode(); - } - ConfigManager.settings.teamNumber = newTeamNumber; - - ConfigManager.settings.connectionType = NetworkIPMode.values()[(int) map.get("connectionType")]; - ConfigManager.settings.ip = (String) map.get("ip"); - ConfigManager.settings.netmask = (String) map.get("netmask"); - ConfigManager.settings.gateway = (String) map.get("gateway"); - ConfigManager.settings.hostname = (String) map.get("hostname"); - ConfigManager.saveGeneralSettings(); - // setting up network config after saving - boolean isStatic = ConfigManager.settings.connectionType.equals(NetworkIPMode.STATIC); - - boolean state = NetworkManager.setHostname(ConfigManager.settings.hostname) && NetworkManager.setNetwork(isStatic, ConfigManager.settings.ip, ConfigManager.settings.netmask, ConfigManager.settings.gateway); - if (state) { - ctx.status(200); - } else { - ctx.result("Something went wrong while setting network configuration"); - ctx.status(501); - } - SocketHandler.sendFullSettings(); - } catch (JsonProcessingException e) { - ctx.status(500); - } - } - - public static void onDuplicatePipeline(Context ctx) { - ObjectMapper objectMapper = kObjectMapper; - try { - Map data = objectMapper.readValue(ctx.body(), Map.class); - - int cameraIndex = (Integer) data.getOrDefault("camera", -1); - - var pipelineIndex = (Integer) data.get("pipeline"); - StandardCVPipelineSettings origPipeline = (StandardCVPipelineSettings) VisionManager.getCurrentUIVisionProcess().pipelineManager.getPipeline(pipelineIndex).settings; - String tmp = objectMapper.writeValueAsString(origPipeline); - StandardCVPipelineSettings newPipeline = objectMapper.readValue(tmp, StandardCVPipelineSettings.class); - - if (cameraIndex == -1) { // same camera - - VisionManager.getCurrentUIVisionProcess().pipelineManager.duplicatePipeline(newPipeline); - - } else { // another camera - var cam = VisionManager.getVisionProcessByIndex(cameraIndex); - if (cam != null) { - if (cam.getCamera().getProperties().videoModes.size() < newPipeline.videoModeIndex) { - newPipeline.videoModeIndex = cam.getCamera().getProperties().videoModes.size() - 1; - } - if (newPipeline.is3D) { - var calibration = cam.getCamera().getCalibration(cam.getCamera().getProperties().getVideoMode(newPipeline.videoModeIndex)); - if (calibration == null) { - newPipeline.is3D = false; - } - } - VisionManager.getCurrentUIVisionProcess().pipelineManager.duplicatePipeline(newPipeline, cam); - ctx.status(200); - } else { - ctx.status(500); - } - } - } catch (JsonProcessingException | DuplicatedKeyException ex) { - ctx.status(500); - } - } - - - public static void onCameraSettings(Context ctx) { - ObjectMapper objectMapper = kObjectMapper; - try { - Map camSettings = objectMapper.readValue(ctx.body(), Map.class); - - VisionProcess currentVisionProcess = VisionManager.getCurrentUIVisionProcess(); - USBCameraCapture currentCamera = currentVisionProcess.getCamera(); - - double newFOV, tilt; - try { - newFOV = (Double) camSettings.get("fov"); - } catch (Exception ignored) { - newFOV = (Integer) camSettings.get("fov"); - } - try { - tilt = (Double) camSettings.get("tilt"); - } catch (Exception ignored) { - tilt = (Integer) camSettings.get("tilt"); - } - currentCamera.getProperties().setFOV(newFOV); - currentCamera.getProperties().setTilt(Rotation2d.fromDegrees(tilt)); - VisionManager.saveCurrentCameraSettings(); - SocketHandler.sendFullSettings(); - ctx.status(200); - } catch (JsonProcessingException e) { - e.printStackTrace(); - ctx.status(500); - } - } - - public static void onCalibrationStart(Context ctx) throws JsonProcessingException { - PipelineManager pipeManager = VisionManager.getCurrentUIVisionProcess().pipelineManager; - ObjectMapper objectMapper = kObjectMapper; - var data = objectMapper.readValue(ctx.body(), Map.class); - int resolutionIndex = (Integer) data.get("resolution"); - double squareSize; - try { - squareSize = (Double) data.get("squareSize"); - } catch (Exception e) { - squareSize = (Integer) data.get("squareSize"); - } - // convert from mm to meters - pipeManager.calib3dPipe.setSquareSize(squareSize); - VisionManager.getCurrentUIVisionProcess().pipelineManager.calib3dPipe.settings.videoModeIndex = resolutionIndex; - VisionManager.getCurrentUIVisionProcess().pipelineManager.setCalibrationMode(true); - VisionManager.getCurrentUIVisionProcess().getCamera().setVideoMode(resolutionIndex); - } - - public static void onSnapshot(Context ctx) { - Calibrate3dPipeline calPipe = VisionManager.getCurrentUIVisionProcess().pipelineManager.calib3dPipe; - - calPipe.takeSnapshot(); - - HashMap toSend = new HashMap<>(); - toSend.put("snapshotCount", calPipe.getSnapshotCount()); - toSend.put("hasEnough", calPipe.hasEnoughSnapshots()); - - ctx.json(toSend); - ctx.status(200); - } - - public static void onCalibrationEnding(Context ctx) throws JsonProcessingException { - PipelineManager pipeManager = VisionManager.getCurrentUIVisionProcess().pipelineManager; - - var data = kObjectMapper.readValue(ctx.body(), Map.class); - double squareSize; - try { - squareSize = (Double) data.get("squareSize"); - } catch (Exception e) { - squareSize = (Integer) data.get("squareSize"); - } - pipeManager.calib3dPipe.setSquareSize(squareSize); - - System.out.println("Finishing Cal"); - if (pipeManager.calib3dPipe.hasEnoughSnapshots()) { - if (pipeManager.calib3dPipe.tryCalibration()) { - HashMap tmp = new HashMap(); - tmp.put("accuracy", pipeManager.calib3dPipe.getCalibrationAccuracy()); - ctx.json(tmp); - ctx.status(200); - } else { - System.err.println("CALFAIL"); - ctx.status(500); - } - } else { - ctx.status(201); - } - pipeManager.setCalibrationMode(false); - } - - public static void onPnpModel(Context ctx) throws JsonProcessingException { - //noinspection unchecked - List> points = kObjectMapper.readValue(ctx.body(), List.class); - try { - // each entry should be an xy pair - var pointsList = new ArrayList(); - for (List point : points) { - double x, y; - x = point.get(0).doubleValue(); - y = point.get(1).doubleValue(); - var pointToAdd = new Point3(x, y, 0.0); - pointsList.add(pointToAdd); - } - System.out.println(pointsList.toString()); - if (VisionManager.getCurrentUIVisionProcess().pipelineManager.getCurrentPipeline().settings instanceof StandardCVPipelineSettings) { - var settings = (StandardCVPipelineSettings) VisionManager.getCurrentUIVisionProcess().pipelineManager.getCurrentPipeline().settings; - settings.targetCornerMat.fromList(pointsList); - } - } catch (Exception e) { - ctx.status(500); - } - } - - public static void onInstallOrUpdate(Context ctx) { - Platform p = Platform.getCurrentPlatform(); - try { - if (p == Platform.LINUX_RASPBIAN || p == Platform.LINUX_64) { - UploadedFile file = ctx.uploadedFile("file"); - Path filePath; - if (file != null) { - filePath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), file.getFilename()); - File target = new File(filePath.toString()); - OutputStream stream = new FileOutputStream(target); - file.getContent().transferTo(stream); - stream.close(); - } else { - filePath = Paths.get(new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath()); // quirk to get the current file directory - } - Helpers.setService(filePath); - ctx.status(200); - } else { - ctx.result("Only Linux Platforms Support this feature"); - ctx.status(500); - } - } catch (Exception e) { - ctx.result(e.toString()); - ctx.status(500); - } - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/Server.java b/chameleon-server/src/main/java/com/chameleonvision/web/Server.java deleted file mode 100644 index 1561302bf..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/web/Server.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.chameleonvision.web; - -import com.chameleonvision.config.ConfigManager; -import io.javalin.Javalin; - -public class Server { - private static SocketHandler socketHandler; - - public static void main(int port) { - socketHandler = new SocketHandler(); - - Javalin app = Javalin.create(javalinConfig -> { - javalinConfig.showJavalinBanner = false; - javalinConfig.addStaticFiles("web"); - javalinConfig.enableCorsForAllOrigins(); - }); - app.ws("/websocket", ws -> { - ws.onConnect(ctx -> { - socketHandler.onConnect(ctx); - System.out.println("Socket Connected"); - }); - ws.onClose(ctx -> { - socketHandler.onClose(ctx); - System.out.println("Socket Disconnected"); - ConfigManager.saveGeneralSettings(); - }); - ws.onBinaryMessage(ctx -> { - socketHandler.onBinaryMessage(ctx); - }); - }); - app.post("/api/settings/general", RequestHandler::onGeneralSettings); - app.post("/api/settings/camera", RequestHandler::onCameraSettings); - app.post("/api/vision/duplicate", RequestHandler::onDuplicatePipeline); - app.post("/api/settings/startCalibration", RequestHandler::onCalibrationStart); - app.post("/api/settings/snapshot", RequestHandler::onSnapshot); - app.post("/api/settings/endCalibration", RequestHandler::onCalibrationEnding); - app.post("/api/vision/pnpModel", RequestHandler::onPnpModel); - app.post("/api/install", RequestHandler::onInstallOrUpdate); - app.start(port); - } -} diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java deleted file mode 100644 index e15570d8d..000000000 --- a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java +++ /dev/null @@ -1,302 +0,0 @@ -package com.chameleonvision.web; - -import com.chameleonvision.config.CameraCalibrationConfig; -import com.chameleonvision.config.ConfigManager; -import com.chameleonvision.vision.VisionManager; -import com.chameleonvision.vision.VisionProcess; -import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.camera.USBCameraCapture; -import com.chameleonvision.vision.enums.ImageRotationMode; -import com.chameleonvision.vision.enums.StreamDivisor; -import com.chameleonvision.vision.pipeline.CVPipeline; -import com.chameleonvision.vision.pipeline.impl.StandardCVPipeline; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import edu.wpi.cscore.VideoMode; -import io.javalin.websocket.WsBinaryMessageContext; -import io.javalin.websocket.WsCloseContext; -import io.javalin.websocket.WsConnectContext; -import io.javalin.websocket.WsContext; -import org.apache.commons.lang3.ArrayUtils; -import org.msgpack.jackson.dataformat.MessagePackFactory; - -import java.lang.reflect.Field; -import java.nio.ByteBuffer; -import java.util.*; -import java.util.stream.Collectors; - - -public class SocketHandler { - - private static List users; - private static ObjectMapper objectMapper; - - private static final Object broadcastLock = new Object(); - - SocketHandler() { - users = new ArrayList<>(); - objectMapper = new ObjectMapper(new MessagePackFactory()); - } - - void onConnect(WsConnectContext context) { - users.add(context); - sendFullSettings(); - } - - void onClose(WsCloseContext context) { - users.remove(context); - } - - @SuppressWarnings("unchecked") - void onBinaryMessage(WsBinaryMessageContext context) throws Exception { - Map deserialized = objectMapper.readValue((byte[]) ArrayUtils.toPrimitive(context.data()), - new TypeReference<>() { - }); - for (Map.Entry entry : deserialized.entrySet()) { - try { - VisionProcess currentProcess = VisionManager.getCurrentUIVisionProcess(); - CameraCapture currentCamera = currentProcess.getCamera(); - CVPipeline currentPipeline = currentProcess.pipelineManager.getCurrentPipeline(); -// System.out.println("entry.getKey()+entry.getValue()= " + entry.getKey() + entry.getValue()); - switch (entry.getKey()) { - case "driverMode": { - HashMap data = (HashMap) entry.getValue(); - currentProcess.getDriverModeSettings().exposure = (Integer) data.get("driverExposure"); - currentProcess.getDriverModeSettings().brightness = (Integer) data.get("driverBrightness"); - currentProcess.setDriverMode((Boolean) data.get("isDriver")); - - VisionManager.saveCurrentCameraDriverMode(); - break; - } - case "changeCameraName": { - currentProcess.setCameraNickname((String) entry.getValue()); - sendFullSettings(); - VisionManager.saveCurrentCameraSettings(); - break; - } - case "changePipelineName": { - currentProcess.pipelineManager.renameCurrentPipeline((String) entry.getValue()); - sendFullSettings(); - VisionManager.saveCurrentCameraPipelines(); - break; - } - case "addNewPipeline": { -// HashMap data = (HashMap) entry.getValue(); - String pipeName = (String) entry.getValue(); - // TODO: add to UI selection for new 2d/3d - currentProcess.pipelineManager.addNewPipeline(pipeName); - sendFullSettings(); - VisionManager.saveCurrentCameraPipelines(); - break; - } - case "command": { - switch ((String) entry.getValue()) { - case "deleteCurrentPipeline": - currentProcess.pipelineManager.deleteCurrentPipeline(); - sendFullSettings(); - VisionManager.saveCurrentCameraPipelines(); - break; - case "save": - ConfigManager.saveGeneralSettings(); - VisionManager.saveAllCameras(); - System.out.println("Saved Settings"); - break; - } - // used to define all incoming commands - break; - } - case "currentCamera": { - VisionManager.setCurrentProcessByIndex((Integer) entry.getValue()); - sendFullSettings(); - break; - } - case "is3D": { - VisionManager.getCurrentUIVisionProcess().setIs3d((Boolean) entry.getValue()); - break; - } - case "currentPipeline": { - currentProcess.pipelineManager.setCurrentPipeline((Integer) entry.getValue()); - sendFullSettings(); - break; - } - case "isPNPCalibration": { - currentProcess.pipelineManager.setCalibrationMode((Boolean) entry.getValue()); - break; - } - case "takeCalibrationSnapshot": { - currentProcess.pipelineManager.calib3dPipe.takeSnapshot(); - } - default: { - - switch (entry.getKey()) {//Pre field value set - case "rotationMode": {//Create new CaptureStaticProperties with new width and height, reset crosshair calib - ImageRotationMode oldRot = currentPipeline.settings.rotationMode; - ImageRotationMode newRot = ImageRotationMode.class.getEnumConstants()[(Integer) entry.getValue()]; - CaptureStaticProperties prop = currentCamera.getProperties().getStaticProperties(); - int width, height; - if (oldRot.isRotated() != newRot.isRotated()) { - width = prop.mode.height; - height = prop.mode.width; - //Creates new video mode with new width and height to create new CaptureStaticProperties and applies it - currentCamera.getProperties().setStaticProperties(new CaptureStaticProperties( - new VideoMode(prop.mode.pixelFormat, width, height, prop.mode.fps), prop.fov)); - } - prop = currentCamera.getProperties().getStaticProperties(); - currentProcess.cameraStreamer.recalculateDivision(); - if (currentPipeline instanceof StandardCVPipeline) - ((StandardCVPipeline) currentPipeline).settings.point = Arrays.asList(prop.mode.width / 2, prop.mode.height / 2);//Reset Crosshair in single point calib - break; - } - - } - - - if (currentProcess.pipelineManager.getDriverMode()) { - setField(currentProcess.pipelineManager.driverModePipeline.settings, entry.getKey(), entry.getValue()); - } else { - setField(currentPipeline.settings, entry.getKey(), entry.getValue()); - } - - //Post field value set - switch (entry.getKey()) { - case "exposure": { - currentCamera.setExposure((Integer) entry.getValue()); - break; - } - case "brightness": { - currentCamera.setBrightness((Integer) entry.getValue()); - break; - } - case "gain": { - currentCamera.setGain((Integer) entry.getValue()); - break; - } - case "videoModeIndex": { - if (currentPipeline instanceof StandardCVPipeline) - ((StandardCVPipeline) currentPipeline).settings.point = new ArrayList<>();//This will reset the calibration - currentCamera.setVideoMode((Integer) entry.getValue()); - currentProcess.cameraStreamer.recalculateDivision(); - break; - } - case "streamDivisor": { - currentProcess.cameraStreamer.setDivisor(StreamDivisor.values()[(Integer) entry.getValue()], true); - break; - } - } - - VisionManager.saveCurrentCameraPipelines(); - break; - } - } - } catch (Exception e) { - System.err.println(e.getMessage()); - } - broadcastMessage(deserialized, context); - } - } - - private void setField(Object obj, String fieldName, Object value) { - try { - Field field = obj.getClass().getField(fieldName); - if (field.getType().isEnum()) - field.set(obj, field.getType().getEnumConstants()[(Integer) value]); - else - field.set(obj, value); - } catch (NoSuchFieldException | IllegalAccessException ex) { - ex.printStackTrace(); - } - } - - private static void broadcastMessage(Object obj, WsContext userToSkip) { - synchronized (broadcastLock) { - if (users != null) { - var userList = users; - for (WsContext user : userList) { - if (userToSkip != null && user.getSessionId().equals(userToSkip.getSessionId())) { - continue; - } - try { - ByteBuffer b = ByteBuffer.wrap(objectMapper.writeValueAsBytes(obj)); - user.send(b); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } - } - } - } - - public static void broadcastMessage(Object obj) { - broadcastMessage(obj, null);//Broadcasts the message to every user - } - - private static HashMap getOrdinalPipeline(Class cvClass) throws IllegalAccessException { - HashMap tmp = new HashMap<>(); - for (Field field : cvClass.getFields()) { // iterate over every field in CVPipelineSettings - try { - if (!field.getType().isEnum()) { // if the field is not an enum, get it based on the current pipeline - tmp.put(field.getName(), field.get(VisionManager.getCurrentUIVisionProcess().pipelineManager.getCurrentPipeline().settings)); - } else { - var ordinal = (Enum) field.get(VisionManager.getCurrentUIVisionProcess().pipelineManager.getCurrentPipeline().settings); - tmp.put(field.getName(), ordinal.ordinal()); - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } - return tmp; - } - - private static HashMap getOrdinalSettings() { - HashMap tmp = new HashMap<>(); - tmp.put("teamNumber", ConfigManager.settings.teamNumber); - tmp.put("connectionType", ConfigManager.settings.connectionType.ordinal()); - tmp.put("ip", ConfigManager.settings.ip); - tmp.put("gateway", ConfigManager.settings.gateway); - tmp.put("netmask", ConfigManager.settings.netmask); - tmp.put("hostname", ConfigManager.settings.hostname); - return tmp; - } - - private static HashMap getOrdinalCameraSettings() { - HashMap tmp = new HashMap<>(); - VisionProcess currentVisionProcess = VisionManager.getCurrentUIVisionProcess(); - USBCameraCapture currentCamera = VisionManager.getCurrentUIVisionProcess().getCamera(); - - tmp.put("fov", currentCamera.getProperties().getFOV()); - tmp.put("streamDivisor", currentVisionProcess.cameraStreamer.getDivisor().ordinal()); - tmp.put("resolution", currentVisionProcess.getCamera().getProperties().getCurrentVideoModeIndex()); - tmp.put("tilt", currentVisionProcess.getCamera().getProperties().getTilt().getDegrees()); - - List calibrations = currentCamera.getAllCalibrationData().stream() - .map(CameraCalibrationConfig.UICameraCalibrationConfig::new).collect(Collectors.toList()); - tmp.put("calibration", calibrations); - - return tmp; - } - - public static void sendFullSettings() { - //General settings - Map fullSettings = new HashMap<>(); - - VisionProcess currentProcess = VisionManager.getCurrentUIVisionProcess(); - CVPipeline currentPipeline = currentProcess.pipelineManager.getCurrentPipeline(); - - try { - fullSettings.put("settings", getOrdinalSettings()); - fullSettings.put("cameraSettings", getOrdinalCameraSettings()); - fullSettings.put("cameraList", VisionManager.getAllCameraNicknames()); - fullSettings.put("pipeline", getOrdinalPipeline(currentPipeline.settings.getClass())); - fullSettings.put("pipelineList", VisionManager.getCurrentCameraPipelineNicknames()); - fullSettings.put("resolutionList", VisionManager.getCurrentCameraResolutionList()); - fullSettings.put("port", currentProcess.cameraStreamer.getStreamPort()); - fullSettings.put("currentPipelineIndex", VisionManager.getCurrentUIVisionProcess().pipelineManager.getCurrentPipelineIndex()); - fullSettings.put("currentCameraIndex", VisionManager.getCurrentUIVisionProcessIndex()); - } catch (IllegalAccessException e) { - System.err.println("No camera found!"); - } - broadcastMessage(fullSettings); - } -} diff --git a/chameleon-server/src/main/resources/META-INF/MANIFEST.MF b/chameleon-server/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index d1b11537d..000000000 --- a/chameleon-server/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Main-Class: com.chameleonvision.Main diff --git a/chameleon-server/src/main/resources/readonly.sh b/chameleon-server/src/main/resources/readonly.sh deleted file mode 100644 index b214555c1..000000000 --- a/chameleon-server/src/main/resources/readonly.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash - -function is_pi() { - ARCH=$(dpkg --print-architecture) - if [ "$ARCH" = "armhf" ] ; then - echo 0 - else - echo 1 - fi -} - -function is_pione() { - if grep -q "^Revision\s*:\s*00[0-9a-fA-F][0-9a-fA-F]$" /proc/cpuinfo; then - echo 0 - elif grep -q "^Revision\s*:\s*[ 123][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]0[0-36][0-9a-fA-F]$" /proc/cpuinfo ; then - echo 0 - else - echo 1 - fi -} - -function is_pitwo() { - if grep -q "^Revision\s*:\s*[ 123][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]04[0-9a-fA-F]$" /proc/cpuinfo; then - echo 0 - else - echo 1 - fi -} - -function is_pizero() { - if grep -q "^Revision\s*:\s*[ 123][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]0[9cC][0-9a-fA-F]$" /proc/cpuinfo; then - echo 0 - else - echo 1 - fi -} - -function is_pifour() { - if grep -q "^Revision\s*:\s*[ 123][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]11[0-9a-fA-F]$" /proc/cpuinfo; then - echo 0 - else - echo 1 - fi -} - -function get_pi_type() { - if [ $(is_pi) ]; then - if [ $(is_pione) -eq 0 ]; then - echo 1 - elif [ $(is_pitwo) -eq 0 ]; then - echo 2 - elif [ $(is_pizero) -eq 0 ]; then - echo 0 - elif [ $(is_pifour) -eq 0 ]; then - echo 4 - else - echo 3 - fi - else - echo -1 - fi -} - -pi_type=$(get_pi_type) - -if [ $pi_type -ne 3 ] && [ $pi_type -ne 4 ] -then - echo "This script is only for Raspberry Pi 3 and 4!" - exit 1 -fi - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi - -echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1 - -if [ $? -eq 0 ]; then - echo "Internet connection good! Proceding..." -else - echo "Can't connect to the internet! Internet is needed for this operation. Try again with internet connection!" - exit 1 -fi - -# -# From https://medium.com/swlh/make-your-raspberry-pi-file-system-read-only-raspbian-buster-c558694de79 -# - -apt-get update && apt-get upgrade -apt-get remove --purge triggerhappy logrotate dphys-swapfile -apt-get autoremove --purge - -echo ' fastboot noswap ro' >> /boot/cmdline.txt - -sudo apt-get install busybox-syslogd -sudo apt-get remove --purge rsyslog - -sed -i 's/vfat\s*defaults/vfat defaults,ro' /etc/fstab -sed -i 's/ext4\s*defaults,noatime/ext4\s*defaults,noatime,ro' /etc/fstab - -echo '\ntmpfs /tmp tmpfs nosuid,nodev 0 0\ntmpfs /var/log tmpfs nosuid,nodev\n 0 0\ntmpfs /var/tmp tmpfs nosuid,nodev 0 0' >> /etc/fstab - -sudo rm -rf /var/lib/dhcp /var/lib/dhcpcd5 /var/spool /etc/resolv.conf -sudo ln -s /tmp /var/lib/dhcp -sudo ln -s /tmp /var/lib/dhcpcd5 -sudo ln -s /tmp /var/spool -sudo touch /tmp/dhcpcd.resolv.conf -sudo ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf - -sudo rm /var/lib/systemd/random-seed -sudo ln -s /tmp/random-seed /var/lib/systemd/random-seed - -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStartPre=/bin/echo "" >/tmp/random-seed - -sed -i 's/\[Service\]\nType=oneshot\nRemainAfterExit=yes/\[Service\]\nType=oneshot\nRemainAfterExit=yes\nExecStartPre=/bin/echo "" >/tmp/random-seed' /lib/systemd/system/systemd-random-seed.service - -# add ro and rw alianses - -echo 'set_bash_prompt() {\n\n fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p") \n\nPS1=\'\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \' -}\nalias ro=\'sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot\'alias rw=\'sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot\'\nPROMPT_COMMAND=set_bash_prompt' >> /etc/bash.bashrc - -echo 'mount -o remount,ro /\nmount -o remount,ro /boot' >> /etc/bash.bash_logout - -echo "System going down for reboot!" -reboot \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/Roboto.css b/chameleon-server/src/main/resources/web/Roboto.css deleted file mode 100644 index 2f097ca52..000000000 --- a/chameleon-server/src/main/resources/web/Roboto.css +++ /dev/null @@ -1,336 +0,0 @@ -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/chameleon-server/src/main/resources/web/css/app.9a11344b.css b/chameleon-server/src/main/resources/web/css/app.9a11344b.css deleted file mode 100644 index 7ed2d6a50..000000000 --- a/chameleon-server/src/main/resources/web/css/app.9a11344b.css +++ /dev/null @@ -1 +0,0 @@ -html{overflow-y:hidden!important}.imgClass{width:auto;height:45px;vertical-align:middle;padding-right:5px}.tabClass{color:#4baf62}.container{background-color:#212121;padding:0!important}#title{color:#4baf62}span{color:#fff} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-01759076.2eb9f3d3.css b/chameleon-server/src/main/resources/web/css/chunk-01759076.2eb9f3d3.css deleted file mode 100644 index 2cb3806c0..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-01759076.2eb9f3d3.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-slider .v-slider__thumb,.theme--light.v-slider .v-slider__track-background,.theme--light.v-slider .v-slider__track-fill{background:rgba(0,0,0,.26)}.theme--dark.v-slider .v-slider__thumb,.theme--dark.v-slider .v-slider__track-background,.theme--dark.v-slider .v-slider__track-fill{background:hsla(0,0%,100%,.2)}.v-slider{cursor:default;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider input{cursor:default;padding:0;width:100%;display:none}.v-slider__track-container{position:absolute;border-radius:0}.v-slider__thumb-container,.v-slider__track-background,.v-slider__track-fill{position:absolute;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb-container{outline:none;top:50%}.v-slider__thumb-container:hover .v-slider__thumb:before{-webkit-transform:scale(1);transform:scale(1)}.v-slider__thumb{width:12px;height:12px;left:-6px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider__thumb,.v-slider__thumb:before{position:absolute;border-radius:50%;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb:before{content:"";color:inherit;width:36px;height:36px;background:currentColor;opacity:.3;left:-12px;top:-12px;-webkit-transform:scale(.1);transform:scale(.1);pointer-events:none}.v-slider__tick,.v-slider__ticks-container{position:absolute}.v-slider__tick{opacity:0;background-color:rgba(0,0,0,.5);-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);border-radius:0}.v-slider__tick--filled{background-color:hsla(0,0%,100%,.5)}.v-application--is-ltr .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:none;transform:none}.v-application--is-rtl .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-application--is-ltr .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.v-application--is-rtl .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:none;transform:none}.v-slider__tick-label{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.v-slider__thumb-label-container{top:0}.v-slider__thumb-label,.v-slider__thumb-label-container{position:absolute;left:0;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1)}.v-slider__thumb-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.75rem;color:#fff;width:32px;height:32px;border-radius:50% 50% 0;bottom:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider--horizontal{min-height:32px;margin-left:8px;margin-right:8px}.v-slider--horizontal .v-slider__track-container{width:100%;height:2px;left:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.v-slider--horizontal .v-slider__track-background,.v-slider--horizontal .v-slider__track-fill{height:100%}.v-slider--horizontal .v-slider__ticks-container{left:0;height:2px;width:100%}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(0);transform:translateX(0)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(0);transform:translateX(0)}.v-slider--horizontal .v-slider__tick .v-slider__tick-label{top:8px}.v-application--is-ltr .v-slider--horizontal .v-slider__tick .v-slider__tick-label{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick .v-slider__tick-label{-webkit-transform:translateX(50%);transform:translateX(50%)}.v-slider--horizontal .v-slider__thumb-label{-webkit-transform:translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg);transform:translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)}.v-slider--horizontal .v-slider__thumb-label>*{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.v-slider--vertical{min-height:150px;margin-top:12px;margin-bottom:12px}.v-slider--vertical .v-slider__track-container{height:100%;width:2px;left:50%;top:0;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-slider--vertical .v-slider__track-background,.v-slider--vertical .v-slider__track-fill{width:100%}.v-slider--vertical .v-slider__thumb-container{left:50%}.v-slider--vertical .v-slider__ticks-container{top:0;width:2px;height:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-application--is-ltr .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:12px}.v-application--is-rtl .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:12px}.v-slider--vertical .v-slider__thumb-label>*{-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.v-slider__thumb-container--focused .v-slider__thumb:before{-webkit-transform:scale(1);transform:scale(1)}.v-slider--active .v-slider__tick{opacity:1}.v-slider__thumb-container--active .v-slider__thumb:before{-webkit-transform:scale(1.5)!important;transform:scale(1.5)!important}.v-slider--disabled{pointer-events:none}.v-slider--disabled .v-slider__thumb{width:8px;height:8px;left:-4px}.v-slider--disabled .v-slider__thumb:before{display:none}.v-slider__ticks-container--always-show .v-slider__tick{opacity:1}.v-input__slider.v-input--is-readonly .v-input__slot{pointer-events:none}.v-application--is-ltr .v-input__slider .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-application--is-ltr .v-input__slider--inverse-label .v-input__slot .v-label,.v-application--is-rtl .v-input__slider .v-input__slot .v-label{margin-right:0;margin-left:12px}.v-application--is-rtl .v-input__slider--inverse-label .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-input__slider--vertical{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.v-application--is-ltr .v-input__slider--vertical{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.v-application--is-rtl .v-input__slider--vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.v-input__slider--vertical .v-input__append-outer,.v-input__slider--vertical .v-input__prepend-outer,.v-input__slider--vertical .v-input__slot{margin:0}.v-input__slider--vertical .v-messages{display:none}.v-input--has-state .v-slider__track-background{opacity:.4} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-20681be8.5ac7b59c.css b/chameleon-server/src/main/resources/web/css/chunk-20681be8.5ac7b59c.css deleted file mode 100644 index ac3b38369..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-20681be8.5ac7b59c.css +++ /dev/null @@ -1 +0,0 @@ -.v-chip:not(.v-chip--outlined).accent,.v-chip:not(.v-chip--outlined).error,.v-chip:not(.v-chip--outlined).info,.v-chip:not(.v-chip--outlined).primary,.v-chip:not(.v-chip--outlined).secondary,.v-chip:not(.v-chip--outlined).success,.v-chip:not(.v-chip--outlined).warning{color:#fff}.theme--light.v-chip{border-color:rgba(0,0,0,.12);color:rgba(0,0,0,.87)}.theme--light.v-chip:not(.v-chip--active){background:#e0e0e0}.theme--light.v-chip:hover:before{opacity:.04}.theme--light.v-chip--active:before,.theme--light.v-chip--active:hover:before,.theme--light.v-chip:focus:before{opacity:.12}.theme--light.v-chip--active:focus:before{opacity:.16}.theme--dark.v-chip{border-color:hsla(0,0%,100%,.12);color:#fff}.theme--dark.v-chip:not(.v-chip--active){background:#555}.theme--dark.v-chip:hover:before{opacity:.08}.theme--dark.v-chip--active:before,.theme--dark.v-chip--active:hover:before,.theme--dark.v-chip:focus:before{opacity:.24}.theme--dark.v-chip--active:focus:before{opacity:.32}.v-chip{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:default;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;line-height:20px;max-width:100%;outline:none;overflow:hidden;padding:0 12px;position:relative;text-decoration:none;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-property:opacity,-webkit-box-shadow;transition-property:opacity,-webkit-box-shadow;transition-property:box-shadow,opacity;transition-property:box-shadow,opacity,-webkit-box-shadow;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);vertical-align:middle;white-space:nowrap}.v-chip:before{background-color:currentColor;bottom:0;border-radius:inherit;content:"";left:0;opacity:0;position:absolute;pointer-events:none;right:0;top:0}.v-chip .v-avatar{height:24px!important;min-width:24px!important;width:24px!important}.v-chip .v-icon{font-size:24px}.v-application--is-ltr .v-chip .v-avatar--left,.v-application--is-ltr .v-chip .v-icon--left{margin-left:-6px;margin-right:8px}.v-application--is-ltr .v-chip .v-avatar--right,.v-application--is-ltr .v-chip .v-icon--right,.v-application--is-rtl .v-chip .v-avatar--left,.v-application--is-rtl .v-chip .v-icon--left{margin-left:8px;margin-right:-6px}.v-application--is-rtl .v-chip .v-avatar--right,.v-application--is-rtl .v-chip .v-icon--right{margin-left:-6px;margin-right:8px}.v-chip:not(.v-chip--no-color) .v-icon{color:inherit}.v-chip__close.v-icon{font-size:18px;max-height:18px;max-width:18px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-chip__close.v-icon.v-icon--right{margin-right:-4px}.v-application--is-rtl .v-chip__close.v-icon.v-icon--right{margin-left:-4px}.v-chip__close.v-icon:active,.v-chip__close.v-icon:focus,.v-chip__close.v-icon:hover{opacity:.72}.v-chip__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:100%;max-width:100%}.v-chip--active .v-icon{color:inherit}.v-chip--link:before{-webkit-transition:opacity .3s cubic-bezier(.25,.8,.5,1);transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.v-chip--link:focus:before{opacity:.32}.v-chip--clickable{cursor:pointer}.v-chip--clickable:active{-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-chip--disabled{opacity:.4;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-chip__filter{max-width:24px}.v-chip__filter.v-icon{color:inherit}.v-chip__filter.expand-x-transition-enter,.v-chip__filter.expand-x-transition-leave-active{margin:0}.v-chip--pill .v-chip__filter{margin-right:0 16px 0 0}.v-chip--pill .v-avatar{height:32px!important;width:32px!important}.v-application--is-ltr .v-chip--pill .v-avatar--left{margin-left:-12px}.v-application--is-ltr .v-chip--pill .v-avatar--right,.v-application--is-rtl .v-chip--pill .v-avatar--left{margin-right:-12px}.v-application--is-rtl .v-chip--pill .v-avatar--right{margin-left:-12px}.v-chip--label{border-radius:4px!important}.v-chip.v-chip--outlined{border-width:thin;border-style:solid}.v-chip.v-chip--outlined:not(.v-chip--active):before{opacity:0}.v-chip.v-chip--outlined.v-chip--active:before{opacity:.08}.v-chip.v-chip--outlined .v-icon{color:inherit}.v-chip.v-chip--outlined.v-chip.v-chip{background-color:transparent!important}.v-chip.v-chip--selected{background:transparent}.v-chip.v-chip--selected:after{opacity:.28}.v-chip.v-size--x-small{border-radius:8px;font-size:10px;height:16px}.v-chip.v-size--small{border-radius:12px;font-size:12px;height:24px}.v-chip.v-size--default{border-radius:16px;font-size:14px;height:32px}.v-chip.v-size--large{border-radius:27px;font-size:16px;height:54px}.v-chip.v-size--x-large{border-radius:33px;font-size:18px;height:66px} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-369f5d2c.eaa0163e.css b/chameleon-server/src/main/resources/web/css/chunk-369f5d2c.eaa0163e.css deleted file mode 100644 index 5db4dca28..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-369f5d2c.eaa0163e.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-select .v-select__selections{color:rgba(0,0,0,.87)}.theme--light.v-select .v-chip--disabled,.theme--light.v-select.v-input--is-disabled .v-select__selections,.theme--light.v-select .v-select__selection--disabled{color:rgba(0,0,0,.38)}.theme--dark.v-select .v-select__selections,.theme--light.v-select.v-text-field--solo-inverted.v-input--is-focused .v-select__selections{color:#fff}.theme--dark.v-select .v-chip--disabled,.theme--dark.v-select.v-input--is-disabled .v-select__selections,.theme--dark.v-select .v-select__selection--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-select.v-text-field--solo-inverted.v-input--is-focused .v-select__selections{color:rgba(0,0,0,.87)}.v-select{position:relative}.v-select:not(.v-select--is-multi).v-text-field--single-line .v-select__selections{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.v-select>.v-input__control>.v-input__slot{cursor:pointer}.v-select .v-chip{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;margin:4px}.v-select .v-chip--selected:after{opacity:.22}.v-select .fade-transition-leave-active{position:absolute;left:0}.v-select.v-input--is-dirty ::-webkit-input-placeholder{color:transparent!important}.v-select.v-input--is-dirty ::-moz-placeholder{color:transparent!important}.v-select.v-input--is-dirty :-ms-input-placeholder{color:transparent!important}.v-select.v-input--is-dirty ::-ms-input-placeholder{color:transparent!important}.v-select.v-input--is-dirty ::placeholder{color:transparent!important}.v-select:not(.v-input--is-dirty):not(.v-input--is-focused) .v-text-field__prefix{line-height:20px;position:absolute;top:7px;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-select.v-text-field--enclosed:not(.v-text-field--single-line):not(.v-text-field--outlined) .v-select__selections{padding-top:20px}.v-select.v-text-field--outlined:not(.v-text-field--single-line) .v-select__selections{padding:8px 0}.v-select.v-text-field--outlined:not(.v-text-field--single-line).v-input--dense .v-select__selections{padding:4px 0}.v-select.v-text-field input{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;margin-top:0;min-width:0;pointer-events:none;position:relative}.v-select.v-select--is-menu-active .v-input__icon--append .v-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.v-select.v-select--chips input{margin:0}.v-select.v-select--chips .v-select__selections{min-height:42px}.v-select.v-select--chips.v-input--dense .v-select__selections{min-height:40px}.v-select.v-select--chips .v-chip--select.v-chip--active:before{opacity:.2}.v-select.v-select--chips.v-select--chips--small .v-select__selections{min-height:32px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed .v-select__selections{min-height:68px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-input--dense .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-input--dense .v-select__selections{min-height:40px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-select--chips--small .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-select--chips--small .v-select__selections{min-height:32px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-select--chips--small.v-input--dense .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-select--chips--small.v-input--dense .v-select__selections{min-height:38px}.v-select.v-text-field--reverse .v-select__selections,.v-select.v-text-field--reverse .v-select__slot{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.v-select__selections{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:18px;max-width:100%;min-width:0}.v-select__selection{max-width:90%}.v-select__selection--comma{margin:7px 4px 7px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-select__slot{position:relative;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;width:100%}.v-select:not(.v-text-field--single-line):not(.v-text-field--outlined) .v-select__slot>input{-ms-flex-item-align:end;align-self:flex-end}.theme--light.v-card{background-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-card .v-card__subtitle,.theme--light.v-card>.v-card__text{color:rgba(0,0,0,.6)}.theme--light.v-card.v-card--outlined{border:thin solid rgba(0,0,0,.12)}.theme--dark.v-card{background-color:#424242;color:#fff}.theme--dark.v-card .v-card__subtitle,.theme--dark.v-card>.v-card__text{color:hsla(0,0%,100%,.7)}.theme--dark.v-card.v-card--outlined{border:thin solid hsla(0,0%,100%,.12)}.v-card{display:block;max-width:100%;outline:none;text-decoration:none;-webkit-transition-property:opacity,-webkit-box-shadow;transition-property:opacity,-webkit-box-shadow;transition-property:box-shadow,opacity;transition-property:box-shadow,opacity,-webkit-box-shadow;overflow-wrap:break-word;position:relative;white-space:normal;-webkit-transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);will-change:box-shadow;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-card:not(.v-sheet--tile):not(.v-card--shaped){border-radius:4px}.v-card>.v-card__progress+:not(.v-btn):not(.v-chip),.v-card>:first-child:not(.v-btn):not(.v-chip){border-top-left-radius:inherit;border-top-right-radius:inherit}.v-card>:last-child:not(.v-btn):not(.v-chip){border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.v-card__progress{top:0;left:0;right:0;overflow:hidden}.v-card__subtitle+.v-card__text{padding-top:0}.v-card__subtitle,.v-card__text{font-size:.875rem;font-weight:400;line-height:1.375rem;letter-spacing:.0071428571em}.v-card__subtitle,.v-card__text,.v-card__title{padding:16px}.v-card__title{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;font-size:1.25rem;font-weight:500;letter-spacing:.0125em;line-height:2rem;word-break:break-all}.v-card__title+.v-card__subtitle,.v-card__title+.v-card__text{padding-top:0}.v-card__title+.v-card__subtitle{margin-top:-16px}.v-card__text{width:100%}.v-card__actions{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:8px}.v-card__actions .v-btn.v-btn{padding:0 8px}.v-application--is-ltr .v-card__actions .v-btn.v-btn+.v-btn{margin-left:8px}.v-application--is-ltr .v-card__actions .v-btn.v-btn .v-icon--left{margin-left:4px}.v-application--is-ltr .v-card__actions .v-btn.v-btn .v-icon--right{margin-right:4px}.v-application--is-rtl .v-card__actions .v-btn.v-btn+.v-btn{margin-right:8px}.v-application--is-rtl .v-card__actions .v-btn.v-btn .v-icon--left{margin-right:4px}.v-application--is-rtl .v-card__actions .v-btn.v-btn .v-icon--right{margin-left:4px}.v-card--flat{-webkit-box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-card--hover{cursor:pointer;-webkit-transition:-webkit-box-shadow .4s cubic-bezier(.25,.8,.25,1);transition:-webkit-box-shadow .4s cubic-bezier(.25,.8,.25,1);transition:box-shadow .4s cubic-bezier(.25,.8,.25,1);transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),-webkit-box-shadow .4s cubic-bezier(.25,.8,.25,1)}.v-card--hover:focus,.v-card--hover:hover{-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-card--link,.v-card--link .v-chip{cursor:pointer}.v-card--link:focus:before{opacity:.08}.v-card--link:before{background:currentColor;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transition:opacity .2s;transition:opacity .2s}.v-card--disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-card--disabled>:not(.v-card__progress){opacity:.6;-webkit-transition:inherit;transition:inherit}.v-card--loading{overflow:hidden}.v-card--outlined{-webkit-box-shadow:none;box-shadow:none}.v-card--raised{-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-card--shaped{border-radius:24px 4px}.theme--light.v-list-item--disabled{color:rgba(0,0,0,.38)}.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled){color:rgba(0,0,0,.87)!important}.theme--light.v-list-item .v-list-item__mask{color:rgba(0,0,0,.38);background:#eee}.theme--light.v-list-item .v-list-item__action-text,.theme--light.v-list-item .v-list-item__subtitle{color:rgba(0,0,0,.6)}.theme--light.v-list-item:hover:before{opacity:.04}.theme--light.v-list-item--active:before,.theme--light.v-list-item--active:hover:before,.theme--light.v-list-item:focus:before{opacity:.12}.theme--light.v-list-item--active:focus:before,.theme--light.v-list-item.v-list-item--highlighted:before{opacity:.16}.theme--dark.v-list-item--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled){color:#fff!important}.theme--dark.v-list-item .v-list-item__mask{color:hsla(0,0%,100%,.5);background:#494949}.theme--dark.v-list-item .v-list-item__action-text,.theme--dark.v-list-item .v-list-item__subtitle{color:hsla(0,0%,100%,.7)}.theme--dark.v-list-item:hover:before{opacity:.08}.theme--dark.v-list-item--active:before,.theme--dark.v-list-item--active:hover:before,.theme--dark.v-list-item:focus:before{opacity:.24}.theme--dark.v-list-item--active:focus:before,.theme--dark.v-list-item.v-list-item--highlighted:before{opacity:.32}.v-list-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;letter-spacing:normal;min-height:48px;outline:none;padding:0 16px;position:relative;text-decoration:none}.v-list-item--disabled{pointer-events:none}.v-list-item--selectable{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.v-list-item__action{-ms-flex-item-align:center;align-self:center;margin:12px 0}.v-list-item__action .v-input,.v-list-item__action .v-input--selection-controls__input,.v-list-item__action .v-input__control,.v-list-item__action .v-input__slot{margin:0!important}.v-list-item__action .v-input{padding:0}.v-list-item__action .v-input .v-messages{display:none}.v-list-item__action-text{font-size:.75rem}.v-list-item__avatar{-ms-flex-item-align:center;align-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.v-list-item__avatar,.v-list-item__avatar.v-list-item__avatar--horizontal{margin-bottom:8px;margin-top:8px}.v-application--is-ltr .v-list-item__avatar.v-list-item__avatar--horizontal:first-child{margin-left:-16px}.v-application--is-rtl .v-list-item__avatar.v-list-item__avatar--horizontal:first-child{margin-right:-16px}.v-application--is-ltr .v-list-item__avatar.v-list-item__avatar--horizontal:last-child{margin-left:-16px}.v-application--is-rtl .v-list-item__avatar.v-list-item__avatar--horizontal:last-child{margin-right:-16px}.v-list-item__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;overflow:hidden;padding:12px 0}.v-list-item__content>*{line-height:1.1;-webkit-box-flex:1;-ms-flex:1 0 100%;flex:1 0 100%}.v-list-item__content>:not(:last-child){margin-bottom:2px}.v-list-item__icon{-ms-flex-item-align:start;align-self:flex-start;margin:16px 0}.v-application--is-ltr .v-list-item__action:last-of-type:not(:only-child),.v-application--is-ltr .v-list-item__avatar:last-of-type:not(:only-child),.v-application--is-ltr .v-list-item__icon:last-of-type:not(:only-child){margin-left:16px}.v-application--is-rtl .v-list-item__action:last-of-type:not(:only-child),.v-application--is-rtl .v-list-item__avatar:last-of-type:not(:only-child),.v-application--is-rtl .v-list-item__icon:last-of-type:not(:only-child){margin-right:16px}.v-application--is-ltr .v-list-item__avatar:first-child{margin-right:24px}.v-application--is-rtl .v-list-item__avatar:first-child{margin-left:24px}.v-application--is-ltr .v-list-item__action:first-child,.v-application--is-ltr .v-list-item__icon:first-child{margin-right:32px}.v-application--is-rtl .v-list-item__action:first-child,.v-application--is-rtl .v-list-item__icon:first-child{margin-left:32px}.v-list-item__action,.v-list-item__avatar,.v-list-item__icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;min-width:24px}.v-list-item .v-list-item__subtitle,.v-list-item .v-list-item__title{line-height:1.2}.v-list-item__subtitle,.v-list-item__title{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-list-item__title{-ms-flex-item-align:center;align-self:center;font-size:1rem}.v-list-item__title>.v-badge{margin-top:16px}.v-list-item__subtitle{font-size:.875rem}.v-list--dense .v-list-item,.v-list-item--dense{min-height:40px}.v-list--dense .v-list-item .v-list-item__icon,.v-list-item--dense .v-list-item__icon{height:24px;margin-top:8px;margin-bottom:8px}.v-list--dense .v-list-item .v-list-item__content,.v-list-item--dense .v-list-item__content{padding:8px 0}.v-list--dense .v-list-item .v-list-item__subtitle,.v-list--dense .v-list-item .v-list-item__title,.v-list-item--dense .v-list-item__subtitle,.v-list-item--dense .v-list-item__title{font-size:.8125rem;font-weight:500;line-height:1rem}.v-list--dense .v-list-item.v-list-item--two-line,.v-list-item--dense.v-list-item--two-line{min-height:60px}.v-list--dense .v-list-item.v-list-item--three-line,.v-list-item--dense.v-list-item--three-line{min-height:76px}.v-list-item--link{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-list-item--link:before{background-color:currentColor;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-list .v-list-item--active,.v-list .v-list-item--active .v-icon{color:inherit}.v-list-item__action--stack{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;white-space:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.v-list--three-line .v-list-item .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list--three-line .v-list-item .v-list-item__icon,.v-list--two-line .v-list-item .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list--two-line .v-list-item .v-list-item__icon,.v-list-item--three-line .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list-item--three-line .v-list-item__icon,.v-list-item--two-line .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list-item--two-line .v-list-item__icon{margin-bottom:16px;margin-top:16px}.v-list--two-line .v-list-item,.v-list-item--two-line{min-height:64px}.v-list--two-line .v-list-item .v-list-item__icon,.v-list-item--two-line .v-list-item__icon{margin-bottom:32px}.v-list--three-line .v-list-item,.v-list-item--three-line{min-height:88px}.v-list--three-line .v-list-item .v-list-item__action,.v-list--three-line .v-list-item .v-list-item__avatar,.v-list-item--three-line .v-list-item__action,.v-list-item--three-line .v-list-item__avatar{-ms-flex-item-align:start;align-self:flex-start;margin-top:16px;margin-bottom:16px}.v-list--three-line .v-list-item .v-list-item__content,.v-list-item--three-line .v-list-item__content{-ms-flex-item-align:stretch;align-self:stretch}.v-list--three-line .v-list-item .v-list-item__subtitle,.v-list-item--three-line .v-list-item__subtitle{white-space:normal;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box}.v-simple-checkbox{-ms-flex-item-align:center;align-self:center;line-height:normal;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.v-simple-checkbox--disabled{cursor:default}.theme--light.v-subheader{color:rgba(0,0,0,.6)}.theme--dark.v-subheader{color:hsla(0,0%,100%,.7)}.v-subheader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:48px;font-size:.875rem;font-weight:400;padding:0 16px 0 16px}.v-subheader--inset{margin-left:56px}.v-list.accent>.v-list-item,.v-list.error>.v-list-item,.v-list.info>.v-list-item,.v-list.primary>.v-list-item,.v-list.secondary>.v-list-item,.v-list.success>.v-list-item,.v-list.warning>.v-list-item{color:#fff}.theme--light.v-list{background:#fff;color:rgba(0,0,0,.87)}.theme--light.v-list .v-list--disabled{color:rgba(0,0,0,.38)}.theme--light.v-list .v-list-group--active:after,.theme--light.v-list .v-list-group--active:before{background:rgba(0,0,0,.12)}.theme--dark.v-list{background:#424242;color:#fff}.theme--dark.v-list .v-list--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-list .v-list-group--active:after,.theme--dark.v-list .v-list-group--active:before{background:hsla(0,0%,100%,.12)}.v-list{border-radius:4px;display:block;padding:8px 0;position:static;-webkit-transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);transition:box-shadow .28s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);will-change:box-shadow}.v-list--disabled{pointer-events:none}.v-list--flat .v-list-item:before{display:none}.v-list--dense .v-subheader{font-size:.75rem;height:40px;padding:0 8px}.v-list--nav .v-list-item:not(:last-child):not(:only-child),.v-list--rounded .v-list-item:not(:last-child):not(:only-child){margin-bottom:8px}.v-list--nav.v-list--dense .v-list-item:not(:last-child):not(:only-child),.v-list--nav .v-list-item--dense:not(:last-child):not(:only-child),.v-list--rounded.v-list--dense .v-list-item:not(:last-child):not(:only-child),.v-list--rounded .v-list-item--dense:not(:last-child):not(:only-child){margin-bottom:4px}.v-list--nav{padding-left:8px;padding-right:8px}.v-list--nav .v-list-item{padding:0 8px}.v-list--nav .v-list-item,.v-list--nav .v-list-item:before{border-radius:4px}.v-application--is-ltr .v-list--shaped .v-list-item,.v-application--is-ltr .v-list--shaped .v-list-item:before,.v-application--is-ltr .v-list--shaped .v-list-item>.v-ripple__container{border-bottom-right-radius:32px!important;border-top-right-radius:32px!important}.v-application--is-rtl .v-list--shaped .v-list-item,.v-application--is-rtl .v-list--shaped .v-list-item:before,.v-application--is-rtl .v-list--shaped .v-list-item>.v-ripple__container{border-bottom-left-radius:32px!important;border-top-left-radius:32px!important}.v-application--is-ltr .v-list--shaped.v-list--two-line .v-list-item,.v-application--is-ltr .v-list--shaped.v-list--two-line .v-list-item:before,.v-application--is-ltr .v-list--shaped.v-list--two-line .v-list-item>.v-ripple__container{border-bottom-right-radius:42.6666666667px!important;border-top-right-radius:42.6666666667px!important}.v-application--is-rtl .v-list--shaped.v-list--two-line .v-list-item,.v-application--is-rtl .v-list--shaped.v-list--two-line .v-list-item:before,.v-application--is-rtl .v-list--shaped.v-list--two-line .v-list-item>.v-ripple__container{border-bottom-left-radius:42.6666666667px!important;border-top-left-radius:42.6666666667px!important}.v-application--is-ltr .v-list--shaped.v-list--three-line .v-list-item,.v-application--is-ltr .v-list--shaped.v-list--three-line .v-list-item:before,.v-application--is-ltr .v-list--shaped.v-list--three-line .v-list-item>.v-ripple__container{border-bottom-right-radius:58.6666666667px!important;border-top-right-radius:58.6666666667px!important}.v-application--is-rtl .v-list--shaped.v-list--three-line .v-list-item,.v-application--is-rtl .v-list--shaped.v-list--three-line .v-list-item:before,.v-application--is-rtl .v-list--shaped.v-list--three-line .v-list-item>.v-ripple__container{border-bottom-left-radius:58.6666666667px!important;border-top-left-radius:58.6666666667px!important}.v-application--is-ltr .v-list--shaped{padding-right:8px}.v-application--is-rtl .v-list--shaped{padding-left:8px}.v-list--rounded{padding:8px}.v-list--rounded .v-list-item,.v-list--rounded .v-list-item:before,.v-list--rounded .v-list-item>.v-ripple__container{border-radius:32px!important}.v-list--rounded.v-list--two-line .v-list-item,.v-list--rounded.v-list--two-line .v-list-item:before,.v-list--rounded.v-list--two-line .v-list-item>.v-ripple__container{border-radius:42.6666666667px!important}.v-list--rounded.v-list--three-line .v-list-item,.v-list--rounded.v-list--three-line .v-list-item:before,.v-list--rounded.v-list--three-line .v-list-item>.v-ripple__container{border-radius:58.6666666667px!important}.v-list--subheader{padding-top:0}.v-list-group .v-list-group__header .v-list-item__icon.v-list-group__header__append-icon{-ms-flex-item-align:center;align-self:center;margin:0;min-width:48px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.v-list-group--sub-group{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.v-list-group__header.v-list-item--active:not(:hover):not(:focus):before{opacity:0}.v-list-group__items{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.v-list-group--active>.v-list-group__header.v-list-group__header--sub-group>.v-list-group__header__prepend-icon .v-icon,.v-list-group--active>.v-list-group__header>.v-list-group__header__append-icon .v-icon{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.v-list-group--active>.v-list-group__header .v-list-group__header__prepend-icon .v-icon,.v-list-group--active>.v-list-group__header .v-list-item,.v-list-group--active>.v-list-group__header .v-list-item__content{color:inherit}.v-application--is-ltr .v-list-group--sub-group .v-list-item__action:first-child,.v-application--is-ltr .v-list-group--sub-group .v-list-item__avatar:first-child,.v-application--is-ltr .v-list-group--sub-group .v-list-item__icon:first-child{margin-right:16px}.v-application--is-rtl .v-list-group--sub-group .v-list-item__action:first-child,.v-application--is-rtl .v-list-group--sub-group .v-list-item__avatar:first-child,.v-application--is-rtl .v-list-group--sub-group .v-list-item__icon:first-child{margin-left:16px}.v-application--is-ltr .v-list-group--sub-group .v-list-group__header{padding-left:32px}.v-application--is-rtl .v-list-group--sub-group .v-list-group__header{padding-right:32px}.v-application--is-ltr .v-list-group--sub-group .v-list-group__items .v-list-item{padding-left:40px}.v-application--is-rtl .v-list-group--sub-group .v-list-group__items .v-list-item{padding-right:40px}.v-list-group--sub-group.v-list-group--active .v-list-item__icon.v-list-group__header__prepend-icon .v-icon{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.v-application--is-ltr .v-list-group--no-action>.v-list-group__items>div>.v-list-item{padding-left:72px}.v-application--is-rtl .v-list-group--no-action>.v-list-group__items>div>.v-list-item{padding-right:72px}.v-application--is-ltr .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>div>.v-list-item{padding-left:88px}.v-application--is-rtl .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>div>.v-list-item{padding-right:88px}.v-application--is-ltr .v-list--dense .v-list-group--sub-group .v-list-group__header{padding-left:24px}.v-application--is-rtl .v-list--dense .v-list-group--sub-group .v-list-group__header{padding-right:24px}.v-application--is-ltr .v-list--dense.v-list--nav .v-list-group--no-action>.v-list-group__items>div>.v-list-item{padding-left:64px}.v-application--is-rtl .v-list--dense.v-list--nav .v-list-group--no-action>.v-list-group__items>div>.v-list-item{padding-right:64px}.v-application--is-ltr .v-list--dense.v-list--nav .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>div>.v-list-item{padding-left:80px}.v-application--is-rtl .v-list--dense.v-list--nav .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>div>.v-list-item{padding-right:80px}.v-avatar{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:normal;position:relative;text-align:center;vertical-align:middle}.v-avatar .v-icon,.v-avatar .v-image,.v-avatar .v-responsive__content,.v-avatar img,.v-avatar svg{border-radius:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:inherit;width:inherit}.v-avatar--tile{border-radius:0}.v-list-item-group .v-list-item--active{color:inherit}.v-chip:not(.v-chip--outlined).accent,.v-chip:not(.v-chip--outlined).error,.v-chip:not(.v-chip--outlined).info,.v-chip:not(.v-chip--outlined).primary,.v-chip:not(.v-chip--outlined).secondary,.v-chip:not(.v-chip--outlined).success,.v-chip:not(.v-chip--outlined).warning{color:#fff}.theme--light.v-chip{border-color:rgba(0,0,0,.12);color:rgba(0,0,0,.87)}.theme--light.v-chip:not(.v-chip--active){background:#e0e0e0}.theme--light.v-chip:hover:before{opacity:.04}.theme--light.v-chip--active:before,.theme--light.v-chip--active:hover:before,.theme--light.v-chip:focus:before{opacity:.12}.theme--light.v-chip--active:focus:before{opacity:.16}.theme--dark.v-chip{border-color:hsla(0,0%,100%,.12);color:#fff}.theme--dark.v-chip:not(.v-chip--active){background:#555}.theme--dark.v-chip:hover:before{opacity:.08}.theme--dark.v-chip--active:before,.theme--dark.v-chip--active:hover:before,.theme--dark.v-chip:focus:before{opacity:.24}.theme--dark.v-chip--active:focus:before{opacity:.32}.v-chip{-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:default;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;line-height:20px;max-width:100%;outline:none;overflow:hidden;padding:0 12px;position:relative;text-decoration:none;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-property:opacity,-webkit-box-shadow;transition-property:opacity,-webkit-box-shadow;transition-property:box-shadow,opacity;transition-property:box-shadow,opacity,-webkit-box-shadow;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);vertical-align:middle;white-space:nowrap}.v-chip:before{background-color:currentColor;bottom:0;border-radius:inherit;content:"";left:0;opacity:0;position:absolute;pointer-events:none;right:0;top:0}.v-chip .v-avatar{height:24px!important;min-width:24px!important;width:24px!important}.v-chip .v-icon{font-size:24px}.v-application--is-ltr .v-chip .v-avatar--left,.v-application--is-ltr .v-chip .v-icon--left{margin-left:-6px;margin-right:8px}.v-application--is-ltr .v-chip .v-avatar--right,.v-application--is-ltr .v-chip .v-icon--right,.v-application--is-rtl .v-chip .v-avatar--left,.v-application--is-rtl .v-chip .v-icon--left{margin-left:8px;margin-right:-6px}.v-application--is-rtl .v-chip .v-avatar--right,.v-application--is-rtl .v-chip .v-icon--right{margin-left:-6px;margin-right:8px}.v-chip:not(.v-chip--no-color) .v-icon{color:inherit}.v-chip__close.v-icon{font-size:18px;max-height:18px;max-width:18px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-chip__close.v-icon.v-icon--right{margin-right:-4px}.v-application--is-rtl .v-chip__close.v-icon.v-icon--right{margin-left:-4px}.v-chip__close.v-icon:active,.v-chip__close.v-icon:focus,.v-chip__close.v-icon:hover{opacity:.72}.v-chip__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:100%;max-width:100%}.v-chip--active .v-icon{color:inherit}.v-chip--link:before{-webkit-transition:opacity .3s cubic-bezier(.25,.8,.5,1);transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.v-chip--link:focus:before{opacity:.32}.v-chip--clickable{cursor:pointer}.v-chip--clickable:active{-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-chip--disabled{opacity:.4;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-chip__filter{max-width:24px}.v-chip__filter.v-icon{color:inherit}.v-chip__filter.expand-x-transition-enter,.v-chip__filter.expand-x-transition-leave-active{margin:0}.v-chip--pill .v-chip__filter{margin-right:0 16px 0 0}.v-chip--pill .v-avatar{height:32px!important;width:32px!important}.v-application--is-ltr .v-chip--pill .v-avatar--left{margin-left:-12px}.v-application--is-ltr .v-chip--pill .v-avatar--right,.v-application--is-rtl .v-chip--pill .v-avatar--left{margin-right:-12px}.v-application--is-rtl .v-chip--pill .v-avatar--right{margin-left:-12px}.v-chip--label{border-radius:4px!important}.v-chip.v-chip--outlined{border-width:thin;border-style:solid}.v-chip.v-chip--outlined:not(.v-chip--active):before{opacity:0}.v-chip.v-chip--outlined.v-chip--active:before{opacity:.08}.v-chip.v-chip--outlined .v-icon{color:inherit}.v-chip.v-chip--outlined.v-chip.v-chip{background-color:transparent!important}.v-chip.v-chip--selected{background:transparent}.v-chip.v-chip--selected:after{opacity:.28}.v-chip.v-size--x-small{border-radius:8px;font-size:10px;height:16px}.v-chip.v-size--small{border-radius:12px;font-size:12px;height:24px}.v-chip.v-size--default{border-radius:16px;font-size:14px;height:32px}.v-chip.v-size--large{border-radius:27px;font-size:16px;height:54px}.v-chip.v-size--x-large{border-radius:33px;font-size:18px;height:66px}.v-menu{display:none}.v-menu--attached{display:inline}.v-menu__content{position:absolute;display:inline-block;border-radius:4px;max-width:80%;overflow-y:auto;overflow-x:hidden;contain:content;will-change:transform;-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-menu__content--active{pointer-events:none}.v-menu__content--auto .v-list-item{-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-timing-function:cubic-bezier(.25,.8,.25,1)}.v-menu__content--fixed{position:fixed}.v-menu__content>.card{contain:content;-webkit-backface-visibility:hidden;backface-visibility:hidden}.v-menu>.v-menu__content{max-width:none}.v-menu-transition-enter .v-list-item{min-width:0;pointer-events:none}.v-menu-transition-enter-to .v-list-item{pointer-events:auto;-webkit-transition-delay:.1s;transition-delay:.1s}.v-menu-transition-leave-active,.v-menu-transition-leave-to{pointer-events:none}.v-menu-transition-enter,.v-menu-transition-leave-to{opacity:0}.v-menu-transition-enter-active,.v-menu-transition-leave-active{-webkit-transition:all .3s cubic-bezier(.25,.8,.25,1);transition:all .3s cubic-bezier(.25,.8,.25,1)}.v-menu-transition-enter.v-menu__content--auto{-webkit-transition:none!important;transition:none!important}.v-menu-transition-enter.v-menu__content--auto .v-list-item{opacity:0;-webkit-transform:translateY(-15px);transform:translateY(-15px)}.v-menu-transition-enter.v-menu__content--auto .v-list-item--active{opacity:1;-webkit-transform:none!important;transform:none!important;pointer-events:auto} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-423191c4.0a21637d.css b/chameleon-server/src/main/resources/web/css/chunk-423191c4.0a21637d.css deleted file mode 100644 index 8d360a9c0..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-423191c4.0a21637d.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-radio--is-disabled label{color:rgba(0,0,0,.38)}.theme--light.v-radio--is-disabled .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-radio--is-disabled label{color:hsla(0,0%,100%,.5)}.theme--dark.v-radio--is-disabled .v-icon{color:hsla(0,0%,100%,.3)!important}.v-radio{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:auto;margin-right:16px;outline:none}.v-radio--is-disabled{pointer-events:none}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none}.v-input--radio-group__input{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.v-input--radio-group--column .v-input--radio-group__input>.v-label{padding-bottom:8px}.v-input--radio-group--row .v-input--radio-group__input>.v-label{padding-right:8px}.v-input--radio-group--row .v-input--radio-group__input{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap}.v-input--radio-group--column .v-radio:not(:last-child):not(:only-child){margin-bottom:8px}.v-input--radio-group--column .v-input--radio-group__input{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.theme--light.v-file-input .v-file-input__text{color:rgba(0,0,0,.87)}.theme--light.v-file-input .v-file-input__text--placeholder{color:rgba(0,0,0,.6)}.theme--dark.v-file-input .v-file-input__text{color:#fff}.theme--dark.v-file-input .v-file-input__text--placeholder{color:hsla(0,0%,100%,.7)}.v-file-input input[type=file]{opacity:0;max-width:0;width:0}.v-file-input .v-file-input__text{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.v-file-input .v-file-input__text.v-file-input__text--chips{-ms-flex-wrap:wrap;flex-wrap:wrap}.v-file-input .v-file-input__text .v-chip{margin:4px}.v-file-input.v-text-field--filled:not(.v-text-field--single-line) .v-file-input__text{padding-top:22px}.v-file-input.v-text-field--outlined .v-text-field__slot{padding:6px 0}.v-file-input.v-text-field--outlined.v-input--dense .v-text-field__slot{padding:3px 0} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-586d85e4.873c9690.css b/chameleon-server/src/main/resources/web/css/chunk-586d85e4.873c9690.css deleted file mode 100644 index b33dca2a3..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-586d85e4.873c9690.css +++ /dev/null @@ -1 +0,0 @@ -#canvasId[data-v-a5e844ac]{width:400px;height:400px;background-color:#2b2b2b;border-radius:5px;border:2px solid grey;-webkit-box-shadow:0 0 5px 1px;box-shadow:0 0 5px 1px}th[data-v-a5e844ac]{width:80px;text-align:center}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none}.theme--light.v-data-table{background-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-data-table .v-data-table__divider{border-right:thin solid rgba(0,0,0,.12)}.theme--light.v-data-table.v-data-table--fixed-header thead th{background:#fff;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.12);box-shadow:inset 0 -1px 0 rgba(0,0,0,.12)}.theme--light.v-data-table thead tr:last-child th{border-bottom:thin solid rgba(0,0,0,.12)}.theme--light.v-data-table thead tr th{color:rgba(0,0,0,.87)}.theme--light.v-data-table tbody tr:not(:last-child) td:last-child,.theme--light.v-data-table tbody tr:not(:last-child) td:not(.v-data-table__mobile-row){border-bottom:thin solid rgba(0,0,0,.12)}.theme--light.v-data-table tbody tr.active{background:#f5f5f5}.theme--light.v-data-table tbody tr:hover:not(.v-data-table__expanded__content){background:#eee}.theme--dark.v-data-table{background-color:#424242;color:#fff}.theme--dark.v-data-table .v-data-table__divider{border-right:thin solid hsla(0,0%,100%,.12)}.theme--dark.v-data-table.v-data-table--fixed-header thead th{background:#424242;-webkit-box-shadow:inset 0 -1px 0 hsla(0,0%,100%,.12);box-shadow:inset 0 -1px 0 hsla(0,0%,100%,.12)}.theme--dark.v-data-table thead tr:last-child th{border-bottom:thin solid hsla(0,0%,100%,.12)}.theme--dark.v-data-table thead tr th{color:#fff}.theme--dark.v-data-table tbody tr:not(:last-child) td:last-child,.theme--dark.v-data-table tbody tr:not(:last-child) td:not(.v-data-table__mobile-row){border-bottom:thin solid hsla(0,0%,100%,.12)}.theme--dark.v-data-table tbody tr.active{background:#505050}.theme--dark.v-data-table tbody tr:hover:not(.v-data-table__expanded__content){background:#616161}.v-data-table table{width:100%;border-spacing:0}.v-data-table td,.v-data-table th{padding:0 16px}.v-data-table th{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:.75rem;height:48px}.v-application--is-ltr .v-data-table th{text-align:left}.v-application--is-rtl .v-data-table th{text-align:right}.v-data-table td{font-size:.875rem;height:48px}.v-data-table__wrapper{overflow-x:auto;overflow-y:hidden}.v-data-table__progress{height:auto!important}.v-data-table__progress th{height:auto!important;border:none!important;padding:0}.v-data-table--dense td{height:24px}.v-data-table--dense th{height:32px}.v-data-table--fixed-header .v-data-table__wrapper,.v-data-table--fixed-height .v-data-table__wrapper{overflow-y:auto}.v-data-table--fixed-header thead th{border-bottom:0!important;position:-webkit-sticky;position:sticky;top:0;z-index:2}.v-data-table--fixed-header thead tr:nth-child(2) th{top:48px}.v-application--is-ltr .v-data-table--fixed-header .v-data-footer{margin-right:17px}.v-application--is-rtl .v-data-table--fixed-header .v-data-footer{margin-left:17px}.v-data-table--fixed.v-data-table--dense thead tr:nth-child(2) th{top:32px}.theme--light.v-input--switch .v-input--switch__thumb{color:#fff}.theme--light.v-input--switch .v-input--switch__track{color:rgba(0,0,0,.38)}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#fafafa!important}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:rgba(0,0,0,.12)!important}.theme--dark.v-input--switch .v-input--switch__thumb{color:#bdbdbd}.theme--dark.v-input--switch .v-input--switch__track{color:hsla(0,0%,100%,.3)}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#424242!important}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:hsla(0,0%,100%,.1)!important}.v-input--switch__thumb,.v-input--switch__track{background-color:currentColor;pointer-events:none;-webkit-transition:inherit;transition:inherit}.v-input--switch__track{border-radius:8px;width:36px;height:14px;left:2px;position:absolute;opacity:.6;right:2px;top:calc(50% - 7px)}.v-input--switch__thumb{border-radius:50%;top:calc(50% - 10px);height:20px;position:relative;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-input--switch .v-input--selection-controls__input{width:38px}.v-input--switch .v-input--selection-controls__ripple{top:calc(50% - 24px)}.v-input--switch.v-input--dense .v-input--switch__thumb{width:18px;height:18px}.v-input--switch.v-input--dense .v-input--switch__track{height:12px;width:32px}.v-input--switch.v-input--dense.v-input--switch--inset .v-input--switch__track{height:22px;width:44px;top:calc(50% - 12px);left:-3px}.v-input--switch.v-input--dense .v-input--selection-controls__ripple{top:calc(50% - 22px)}.v-input--switch.v-input--is-dirty.v-input--is-disabled{opacity:.6}.v-application--is-ltr .v-input--switch .v-input--selection-controls__ripple{left:-14px}.v-application--is-ltr .v-input--switch.v-input--dense .v-input--selection-controls__ripple{left:-12px}.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px);transform:translate(20px)}.v-application--is-rtl .v-input--switch .v-input--selection-controls__ripple{right:-14px}.v-application--is-rtl .v-input--switch.v-input--dense .v-input--selection-controls__ripple{right:-12px}.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-20px);transform:translate(-20px)}.v-input--switch:not(.v-input--switch--flat):not(.v-input--switch--inset) .v-input--switch__thumb{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-input--switch--inset .v-input--selection-controls__input,.v-input--switch--inset .v-input--switch__track{width:48px}.v-input--switch--inset .v-input--switch__track{border-radius:14px;height:28px;left:-4px;opacity:.32;top:calc(50% - 14px)}.v-application--is-ltr .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(0)!important;transform:translate(0)!important}.v-application--is-rtl .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(-6px)!important;transform:translate(-6px)!important}.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px)!important;transform:translate(20px)!important}.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-26px)!important;transform:translate(-26px)!important}.miniMapClass[data-v-360fa81b]{width:50%!important;height:50%!important} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-5af10b37.5b8e5b27.css b/chameleon-server/src/main/resources/web/css/chunk-5af10b37.5b8e5b27.css deleted file mode 100644 index 25b989dbe..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-5af10b37.5b8e5b27.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#fafafa}.theme--dark.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#424242}.v-input--range-slider.v-input--is-disabled .v-slider__track-fill{display:none}.v-input--range-slider.v-input--is-disabled.v-input--slider .v-slider.v-slider .v-slider__thumb{border-color:transparent}.theme--light.v-slider .v-slider__thumb,.theme--light.v-slider .v-slider__track-background,.theme--light.v-slider .v-slider__track-fill{background:rgba(0,0,0,.26)}.theme--dark.v-slider .v-slider__thumb,.theme--dark.v-slider .v-slider__track-background,.theme--dark.v-slider .v-slider__track-fill{background:hsla(0,0%,100%,.2)}.v-slider{cursor:default;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider input{cursor:default;padding:0;width:100%;display:none}.v-slider__track-container{position:absolute;border-radius:0}.v-slider__thumb-container,.v-slider__track-background,.v-slider__track-fill{position:absolute;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb-container{outline:none;top:50%}.v-slider__thumb-container:hover .v-slider__thumb:before{-webkit-transform:scale(1);transform:scale(1)}.v-slider__thumb{width:12px;height:12px;left:-6px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider__thumb,.v-slider__thumb:before{position:absolute;border-radius:50%;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb:before{content:"";color:inherit;width:36px;height:36px;background:currentColor;opacity:.3;left:-12px;top:-12px;-webkit-transform:scale(.1);transform:scale(.1);pointer-events:none}.v-slider__tick,.v-slider__ticks-container{position:absolute}.v-slider__tick{opacity:0;background-color:rgba(0,0,0,.5);-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);border-radius:0}.v-slider__tick--filled{background-color:hsla(0,0%,100%,.5)}.v-application--is-ltr .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:none;transform:none}.v-application--is-rtl .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-application--is-ltr .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.v-application--is-rtl .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:none;transform:none}.v-slider__tick-label{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.v-slider__thumb-label-container{top:0}.v-slider__thumb-label,.v-slider__thumb-label-container{position:absolute;left:0;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1)}.v-slider__thumb-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:.75rem;color:#fff;width:32px;height:32px;border-radius:50% 50% 0;bottom:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider--horizontal{min-height:32px;margin-left:8px;margin-right:8px}.v-slider--horizontal .v-slider__track-container{width:100%;height:2px;left:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.v-slider--horizontal .v-slider__track-background,.v-slider--horizontal .v-slider__track-fill{height:100%}.v-slider--horizontal .v-slider__ticks-container{left:0;height:2px;width:100%}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(0);transform:translateX(0)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateX(0);transform:translateX(0)}.v-slider--horizontal .v-slider__tick .v-slider__tick-label{top:8px}.v-application--is-ltr .v-slider--horizontal .v-slider__tick .v-slider__tick-label{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick .v-slider__tick-label{-webkit-transform:translateX(50%);transform:translateX(50%)}.v-slider--horizontal .v-slider__thumb-label{-webkit-transform:translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg);transform:translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)}.v-slider--horizontal .v-slider__thumb-label>*{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.v-slider--vertical{min-height:150px;margin-top:12px;margin-bottom:12px}.v-slider--vertical .v-slider__track-container{height:100%;width:2px;left:50%;top:0;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-slider--vertical .v-slider__track-background,.v-slider--vertical .v-slider__track-fill{width:100%}.v-slider--vertical .v-slider__thumb-container{left:50%}.v-slider--vertical .v-slider__ticks-container{top:0;width:2px;height:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.v-application--is-ltr .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:12px}.v-application--is-rtl .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:12px}.v-slider--vertical .v-slider__thumb-label>*{-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.v-slider__thumb-container--focused .v-slider__thumb:before{-webkit-transform:scale(1);transform:scale(1)}.v-slider--active .v-slider__tick{opacity:1}.v-slider__thumb-container--active .v-slider__thumb:before{-webkit-transform:scale(1.5)!important;transform:scale(1.5)!important}.v-slider--disabled{pointer-events:none}.v-slider--disabled .v-slider__thumb{width:8px;height:8px;left:-4px}.v-slider--disabled .v-slider__thumb:before{display:none}.v-slider__ticks-container--always-show .v-slider__tick{opacity:1}.v-input__slider.v-input--is-readonly .v-input__slot{pointer-events:none}.v-application--is-ltr .v-input__slider .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-application--is-ltr .v-input__slider--inverse-label .v-input__slot .v-label,.v-application--is-rtl .v-input__slider .v-input__slot .v-label{margin-right:0;margin-left:12px}.v-application--is-rtl .v-input__slider--inverse-label .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-input__slider--vertical{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.v-application--is-ltr .v-input__slider--vertical{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.v-application--is-rtl .v-input__slider--vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.v-input__slider--vertical .v-input__append-outer,.v-input__slider--vertical .v-input__prepend-outer,.v-input__slider--vertical .v-input__slot{margin:0}.v-input__slider--vertical .v-messages{display:none}.v-input--has-state .v-slider__track-background{opacity:.4}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none}.theme--light.v-input--switch .v-input--switch__thumb{color:#fff}.theme--light.v-input--switch .v-input--switch__track{color:rgba(0,0,0,.38)}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#fafafa!important}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:rgba(0,0,0,.12)!important}.theme--dark.v-input--switch .v-input--switch__thumb{color:#bdbdbd}.theme--dark.v-input--switch .v-input--switch__track{color:hsla(0,0%,100%,.3)}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#424242!important}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:hsla(0,0%,100%,.1)!important}.v-input--switch__thumb,.v-input--switch__track{background-color:currentColor;pointer-events:none;-webkit-transition:inherit;transition:inherit}.v-input--switch__track{border-radius:8px;width:36px;height:14px;left:2px;position:absolute;opacity:.6;right:2px;top:calc(50% - 7px)}.v-input--switch__thumb{border-radius:50%;top:calc(50% - 10px);height:20px;position:relative;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-input--switch .v-input--selection-controls__input{width:38px}.v-input--switch .v-input--selection-controls__ripple{top:calc(50% - 24px)}.v-input--switch.v-input--dense .v-input--switch__thumb{width:18px;height:18px}.v-input--switch.v-input--dense .v-input--switch__track{height:12px;width:32px}.v-input--switch.v-input--dense.v-input--switch--inset .v-input--switch__track{height:22px;width:44px;top:calc(50% - 12px);left:-3px}.v-input--switch.v-input--dense .v-input--selection-controls__ripple{top:calc(50% - 22px)}.v-input--switch.v-input--is-dirty.v-input--is-disabled{opacity:.6}.v-application--is-ltr .v-input--switch .v-input--selection-controls__ripple{left:-14px}.v-application--is-ltr .v-input--switch.v-input--dense .v-input--selection-controls__ripple{left:-12px}.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px);transform:translate(20px)}.v-application--is-rtl .v-input--switch .v-input--selection-controls__ripple{right:-14px}.v-application--is-rtl .v-input--switch.v-input--dense .v-input--selection-controls__ripple{right:-12px}.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-20px);transform:translate(-20px)}.v-input--switch:not(.v-input--switch--flat):not(.v-input--switch--inset) .v-input--switch__thumb{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-input--switch--inset .v-input--selection-controls__input,.v-input--switch--inset .v-input--switch__track{width:48px}.v-input--switch--inset .v-input--switch__track{border-radius:14px;height:28px;left:-4px;opacity:.32;top:calc(50% - 14px)}.v-application--is-ltr .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(0)!important;transform:translate(0)!important}.v-application--is-rtl .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(-6px)!important;transform:translate(-6px)!important}.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px)!important;transform:translate(20px)!important}.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-26px)!important;transform:translate(-26px)!important} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-6516d830.e951ae66.css b/chameleon-server/src/main/resources/web/css/chunk-6516d830.e951ae66.css deleted file mode 100644 index 388a550c1..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-6516d830.e951ae66.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-input:not(.v-input--is-disabled) input,.theme--light.v-input:not(.v-input--is-disabled) textarea{color:rgba(0,0,0,.87)}.theme--light.v-input input::-webkit-input-placeholder,.theme--light.v-input textarea::-webkit-input-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input::-moz-placeholder,.theme--light.v-input textarea::-moz-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input:-ms-input-placeholder,.theme--light.v-input textarea:-ms-input-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input::-ms-input-placeholder,.theme--light.v-input textarea::-ms-input-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input::placeholder,.theme--light.v-input textarea::placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input--is-disabled .v-label,.theme--light.v-input--is-disabled input,.theme--light.v-input--is-disabled textarea{color:rgba(0,0,0,.38)}.theme--dark.v-input:not(.v-input--is-disabled) input,.theme--dark.v-input:not(.v-input--is-disabled) textarea{color:#fff}.theme--dark.v-input input::-webkit-input-placeholder,.theme--dark.v-input textarea::-webkit-input-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input::-moz-placeholder,.theme--dark.v-input textarea::-moz-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input:-ms-input-placeholder,.theme--dark.v-input textarea:-ms-input-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input::-ms-input-placeholder,.theme--dark.v-input textarea::-ms-input-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input::placeholder,.theme--dark.v-input textarea::placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input--is-disabled .v-label,.theme--dark.v-input--is-disabled input,.theme--dark.v-input--is-disabled textarea{color:hsla(0,0%,100%,.5)}.v-input{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:16px;letter-spacing:normal;max-width:100%;text-align:left}.v-input .v-progress-linear{top:calc(100% - 1px);left:0}.v-input input{max-height:32px}.v-input input:invalid,.v-input textarea:invalid{-webkit-box-shadow:none;box-shadow:none}.v-input input:active,.v-input input:focus,.v-input textarea:active,.v-input textarea:focus{outline:none}.v-input .v-label{height:20px;line-height:20px}.v-input__append-outer,.v-input__prepend-outer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-bottom:4px;margin-top:4px;line-height:1}.v-input__append-outer .v-icon,.v-input__prepend-outer .v-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input__append-outer{margin-left:9px}.v-application--is-ltr .v-input__prepend-outer,.v-application--is-rtl .v-input__append-outer{margin-right:9px}.v-application--is-rtl .v-input__prepend-outer{margin-left:9px}.v-input__control{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:0;width:100%}.v-input__icon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:24px;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:24px;width:24px}.v-input__icon--clear{border-radius:50%}.v-input__slot{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px;min-height:inherit;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);width:100%}.v-input--dense>.v-input__control>.v-input__slot{margin-bottom:4px}.v-input--is-disabled:not(.v-input--is-readonly){pointer-events:none}.v-input--is-loading>.v-input__control>.v-input__slot:after,.v-input--is-loading>.v-input__control>.v-input__slot:before{display:none}.v-input--hide-details>.v-input__control>.v-input__slot{margin-bottom:0}.v-input--has-state.error--text .v-label{-webkit-animation:v-shake .6s cubic-bezier(.25,.8,.5,1);animation:v-shake .6s cubic-bezier(.25,.8,.5,1)}.theme--light.v-label{color:rgba(0,0,0,.6)}.theme--light.v-label--is-disabled{color:rgba(0,0,0,.38)}.theme--dark.v-label{color:hsla(0,0%,100%,.7)}.theme--dark.v-label--is-disabled{color:hsla(0,0%,100%,.5)}.v-label{font-size:16px;line-height:1;min-height:8px;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.theme--light.v-messages{color:rgba(0,0,0,.6)}.theme--dark.v-messages{color:hsla(0,0%,100%,.7)}.v-messages{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:12px;min-height:14px;min-width:1px;position:relative}.v-application--is-ltr .v-messages{text-align:left}.v-application--is-rtl .v-messages{text-align:right}.v-messages__message{line-height:normal;word-break:break-word;overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.theme--light.v-progress-linear{color:rgba(0,0,0,.87)}.theme--dark.v-progress-linear{color:#fff}.v-progress-linear{background:transparent;overflow:hidden;position:relative;-webkit-transition:.2s;transition:.2s;width:100%}.v-progress-linear__buffer{height:inherit;width:100%;z-index:1}.v-progress-linear__background,.v-progress-linear__buffer{left:0;position:absolute;top:0;-webkit-transition:inherit;transition:inherit}.v-progress-linear__background{bottom:0}.v-progress-linear__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;left:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;width:100%;z-index:2}.v-progress-linear__determinate{height:inherit;-webkit-transition:inherit;transition:inherit}.v-progress-linear__indeterminate .long,.v-progress-linear__indeterminate .short{background-color:inherit;bottom:0;height:inherit;left:0;position:absolute;top:0;width:auto;will-change:left,right}.v-progress-linear__indeterminate--active .long{-webkit-animation:indeterminate;animation:indeterminate;-webkit-animation-duration:2.2s;animation-duration:2.2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.v-progress-linear__indeterminate--active .short{-webkit-animation:indeterminate-short;animation:indeterminate-short;-webkit-animation-duration:2.2s;animation-duration:2.2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.v-progress-linear__stream{-webkit-animation:stream .25s linear infinite;animation:stream .25s linear infinite;border-color:currentColor;border-top:4px dotted;bottom:0;opacity:.3;pointer-events:none;position:absolute;right:-8px;top:calc(50% - 2px);-webkit-transition:inherit;transition:inherit}.v-progress-linear__wrapper{overflow:hidden;position:relative;-webkit-transition:inherit;transition:inherit}.v-progress-linear--absolute,.v-progress-linear--fixed{left:0;z-index:1}.v-progress-linear--absolute{position:absolute}.v-progress-linear--fixed{position:fixed}.v-progress-linear--reactive .v-progress-linear__content{pointer-events:none}.v-progress-linear--rounded{border-radius:4px}.v-progress-linear--striped .v-progress-linear__determinate{background-image:linear-gradient(135deg,hsla(0,0%,100%,.25) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.25) 0,hsla(0,0%,100%,.25) 75%,transparent 0,transparent);background-size:40px 40px;background-repeat:repeat-x}.v-progress-linear--query .v-progress-linear__indeterminate--active .long{-webkit-animation:query;animation:query;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.v-progress-linear--query .v-progress-linear__indeterminate--active .short{-webkit-animation:query-short;animation:query-short;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes indeterminate{0%{left:-90%;right:100%}60%{left:-90%;right:100%}to{left:100%;right:-35%}}@keyframes indeterminate{0%{left:-90%;right:100%}60%{left:-90%;right:100%}to{left:100%;right:-35%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@-webkit-keyframes query{0%{right:-90%;left:100%}60%{right:-90%;left:100%}to{right:100%;left:-35%}}@keyframes query{0%{right:-90%;left:100%}60%{right:-90%;left:100%}to{right:100%;left:-35%}}@-webkit-keyframes query-short{0%{right:-200%;left:100%}60%{right:107%;left:-8%}to{right:107%;left:-8%}}@keyframes query-short{0%{right:-200%;left:100%}60%{right:107%;left:-8%}to{right:107%;left:-8%}}@-webkit-keyframes stream{to{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}@keyframes stream{to{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}.theme--light.v-text-field>.v-input__control>.v-input__slot:before{border-color:rgba(0,0,0,.42)}.theme--light.v-text-field:not(.v-input--has-state)>.v-input__control>.v-input__slot:hover:before{border-color:rgba(0,0,0,.87)}.theme--light.v-text-field.v-input--is-disabled>.v-input__control>.v-input__slot:before{-o-border-image:repeating-linear-gradient(90deg,rgba(0,0,0,.38) 0,rgba(0,0,0,.38) 2px,transparent 0,transparent 4px) 1 repeat;border-image:repeating-linear-gradient(90deg,rgba(0,0,0,.38) 0,rgba(0,0,0,.38) 2px,transparent 0,transparent 4px) 1 repeat}.theme--light.v-text-field.v-input--is-disabled .v-text-field__prefix,.theme--light.v-text-field.v-input--is-disabled .v-text-field__suffix{color:rgba(0,0,0,.38)}.theme--light.v-text-field__prefix,.theme--light.v-text-field__suffix{color:rgba(0,0,0,.6)}.theme--light.v-text-field--solo>.v-input__control>.v-input__slot{background:#fff}.theme--light.v-text-field--solo-inverted.v-text-field--solo>.v-input__control>.v-input__slot{background:rgba(0,0,0,.16)}.theme--light.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot{background:#424242}.theme--light.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot .v-label,.theme--light.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot input{color:#fff}.theme--light.v-text-field--filled>.v-input__control>.v-input__slot{background:rgba(0,0,0,.06)}.theme--light.v-text-field--filled .v-text-field__prefix,.theme--light.v-text-field--filled .v-text-field__suffix{max-height:32px;margin-top:20px}.theme--light.v-text-field--filled:not(.v-input--is-focused)>.v-input__control>.v-input__slot:hover{background:rgba(0,0,0,.12)}.theme--light.v-text-field--outlined fieldset{border-color:rgba(0,0,0,.24)}.theme--light.v-text-field--outlined:not(.v-input--is-focused):not(.v-input--has-state)>.v-input__control>.v-input__slot:hover fieldset{border-color:rgba(0,0,0,.86)}.theme--dark.v-text-field>.v-input__control>.v-input__slot:before{border-color:hsla(0,0%,100%,.7)}.theme--dark.v-text-field:not(.v-input--has-state)>.v-input__control>.v-input__slot:hover:before{border-color:#fff}.theme--dark.v-text-field.v-input--is-disabled>.v-input__control>.v-input__slot:before{-o-border-image:repeating-linear-gradient(90deg,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 2px,transparent 0,transparent 4px) 1 repeat;border-image:repeating-linear-gradient(90deg,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 2px,transparent 0,transparent 4px) 1 repeat}.theme--dark.v-text-field.v-input--is-disabled .v-text-field__prefix,.theme--dark.v-text-field.v-input--is-disabled .v-text-field__suffix{color:hsla(0,0%,100%,.5)}.theme--dark.v-text-field__prefix,.theme--dark.v-text-field__suffix{color:hsla(0,0%,100%,.7)}.theme--dark.v-text-field--solo>.v-input__control>.v-input__slot{background:#424242}.theme--dark.v-text-field--solo-inverted.v-text-field--solo>.v-input__control>.v-input__slot{background:hsla(0,0%,100%,.16)}.theme--dark.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot{background:#fff}.theme--dark.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot .v-label,.theme--dark.v-text-field--solo-inverted.v-text-field--solo.v-input--is-focused>.v-input__control>.v-input__slot input{color:rgba(0,0,0,.87)}.theme--dark.v-text-field--filled>.v-input__control>.v-input__slot{background:rgba(0,0,0,.1)}.theme--dark.v-text-field--filled .v-text-field__prefix,.theme--dark.v-text-field--filled .v-text-field__suffix{max-height:32px;margin-top:20px}.theme--dark.v-text-field--filled:not(.v-input--is-focused)>.v-input__control>.v-input__slot:hover{background:rgba(0,0,0,.2)}.v-text-field{padding-top:12px;margin-top:4px}.v-text-field input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;line-height:20px;padding:8px 0 8px;max-width:100%;min-width:0;width:100%}.v-text-field .v-input__control,.v-text-field .v-input__slot,.v-text-field fieldset{border-radius:inherit}.v-text-field.v-input--dense{padding-top:0}.v-text-field.v-input--dense:not(.v-text-field--outlined):not(.v-text-field--single-line) input{padding:4px 0 8px}.v-text-field.v-input--dense[type=text]::-ms-clear{display:none}.v-text-field .v-input__append-inner,.v-text-field .v-input__prepend-inner{-ms-flex-item-align:start;align-self:flex-start;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-top:4px;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-text-field .v-input__prepend-inner{margin-right:auto;padding-right:4px}.v-application--is-ltr .v-text-field .v-input__append-inner,.v-application--is-rtl .v-text-field .v-input__prepend-inner{margin-left:auto;padding-left:4px}.v-application--is-rtl .v-text-field .v-input__append-inner{margin-right:auto;padding-right:4px}.v-text-field .v-counter{white-space:nowrap}.v-application--is-ltr .v-text-field .v-counter{margin-left:8px}.v-application--is-rtl .v-text-field .v-counter{margin-right:8px}.v-text-field .v-label{max-width:90%;overflow:hidden;text-overflow:ellipsis;top:6px;white-space:nowrap;pointer-events:none}.v-application--is-ltr .v-text-field .v-label{-webkit-transform-origin:top left;transform-origin:top left}.v-application--is-rtl .v-text-field .v-label{-webkit-transform-origin:top right;transform-origin:top right}.v-text-field .v-label--active{max-width:133%;-webkit-transform:translateY(-18px) scale(.75);transform:translateY(-18px) scale(.75)}.v-text-field>.v-input__control>.v-input__slot{cursor:text;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-text-field>.v-input__control>.v-input__slot:after,.v-text-field>.v-input__control>.v-input__slot:before{bottom:-1px;content:"";left:0;position:absolute;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);width:100%}.v-text-field>.v-input__control>.v-input__slot:before{border-style:solid;border-width:thin 0 0 0}.v-text-field>.v-input__control>.v-input__slot:after{border-color:currentColor;border-style:solid;border-width:thin 0 thin 0;-webkit-transform:scaleX(0);transform:scaleX(0)}.v-text-field__details{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;max-width:100%;min-height:14px;overflow:hidden}.v-text-field__prefix,.v-text-field__suffix{-ms-flex-item-align:center;align-self:center;cursor:default;-webkit-transition:color .3s cubic-bezier(.25,.8,.5,1);transition:color .3s cubic-bezier(.25,.8,.5,1);white-space:nowrap}.v-application--is-ltr .v-text-field__prefix{text-align:right;padding-right:4px}.v-application--is-rtl .v-text-field__prefix{text-align:left;padding-left:4px}.v-text-field__suffix{white-space:nowrap}.v-application--is-ltr .v-text-field__suffix{padding-left:4px}.v-application--is-rtl .v-text-field__suffix{padding-right:4px}.v-application--is-ltr .v-text-field--reverse .v-text-field__prefix{text-align:left;padding-right:0;padding-left:4px}.v-application--is-rtl .v-text-field--reverse .v-text-field__prefix{text-align:right;padding-right:4px;padding-left:0}.v-application--is-ltr .v-text-field--reverse .v-text-field__suffix{padding-left:0;padding-right:4px}.v-application--is-rtl .v-text-field--reverse .v-text-field__suffix{padding-left:4px;padding-right:0}.v-text-field>.v-input__control>.v-input__slot>.v-text-field__slot{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative}.v-text-field:not(.v-text-field--is-booted) .v-label,.v-text-field:not(.v-text-field--is-booted) legend{-webkit-transition:none;transition:none}.v-text-field--filled,.v-text-field--full-width,.v-text-field--outlined{position:relative}.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--full-width>.v-input__control>.v-input__slot,.v-text-field--outlined>.v-input__control>.v-input__slot{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:56px}.v-text-field--filled.v-input--dense>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense>.v-input__control>.v-input__slot{min-height:44px}.v-text-field--filled.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--filled.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--filled.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot{min-height:40px}.v-text-field--outlined{border-radius:4px}.v-text-field--filled .v-label,.v-text-field--full-width .v-label{top:18px}.v-text-field--filled .v-label--active,.v-text-field--full-width .v-label--active{-webkit-transform:translateY(-6px) scale(.75);transform:translateY(-6px) scale(.75)}.v-text-field--filled.v-input--dense .v-label,.v-text-field--full-width.v-input--dense .v-label{top:17px}.v-text-field--filled.v-input--dense .v-label--active,.v-text-field--full-width.v-input--dense .v-label--active{-webkit-transform:translateY(-10px) scale(.75);transform:translateY(-10px) scale(.75)}.v-text-field--filled.v-input--dense.v-text-field--single-line .v-label,.v-text-field--full-width.v-input--dense.v-text-field--single-line .v-label{top:11px}.v-text-field--filled{border-radius:4px 4px 0 0}.v-text-field--filled:not(.v-text-field--single-line) input{margin-top:22px}.v-text-field--filled.v-input--dense:not(.v-text-field--single-line).v-text-field--outlined input{margin-top:0}.v-text-field--full-width{border-radius:0}.v-text-field--outlined .v-text-field__slot,.v-text-field--single-line .v-text-field__slot{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.v-text-field.v-text-field--enclosed{margin:0;padding:0}.v-text-field.v-text-field--enclosed.v-text-field--single-line .v-text-field__prefix,.v-text-field.v-text-field--enclosed.v-text-field--single-line .v-text-field__suffix{margin-top:0}.v-text-field.v-text-field--enclosed:not(.v-text-field--filled) .v-progress-linear__background{display:none}.v-text-field.v-text-field--enclosed .v-text-field__details,.v-text-field.v-text-field--enclosed:not(.v-text-field--rounded)>.v-input__control>.v-input__slot{padding:0 12px}.v-text-field.v-text-field--enclosed .v-input__append-inner,.v-text-field.v-text-field--enclosed .v-input__append-outer,.v-text-field.v-text-field--enclosed .v-input__prepend-inner,.v-text-field.v-text-field--enclosed .v-input__prepend-outer{margin-top:17px}.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__append-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__append-outer,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__prepend-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__prepend-outer{margin-top:14px}.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-outer,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-outer{margin-top:9px}.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-outer,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-inner,.v-text-field.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-outer{margin-top:7px}.v-text-field.v-text-field--enclosed .v-text-field__details{margin-bottom:8px}.v-application--is-ltr .v-text-field--reverse input{text-align:right}.v-application--is-rtl .v-text-field--reverse input{text-align:left}.v-application--is-ltr .v-text-field--reverse .v-label{-webkit-transform-origin:top right;transform-origin:top right}.v-application--is-rtl .v-text-field--reverse .v-label{-webkit-transform-origin:top left;transform-origin:top left}.v-text-field--reverse .v-text-field__slot,.v-text-field--reverse>.v-input__control>.v-input__slot{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.v-text-field--outlined>.v-input__control>.v-input__slot:after,.v-text-field--outlined>.v-input__control>.v-input__slot:before,.v-text-field--rounded>.v-input__control>.v-input__slot:after,.v-text-field--rounded>.v-input__control>.v-input__slot:before,.v-text-field--solo>.v-input__control>.v-input__slot:after,.v-text-field--solo>.v-input__control>.v-input__slot:before{display:none}.v-text-field--outlined,.v-text-field--solo{border-radius:4px}.v-text-field--outlined{margin-bottom:16px;-webkit-transition:border .3s cubic-bezier(.25,.8,.5,1);transition:border .3s cubic-bezier(.25,.8,.5,1)}.v-text-field--outlined .v-label{top:18px}.v-text-field--outlined .v-label--active{-webkit-transform:translateY(-24px) scale(.75);transform:translateY(-24px) scale(.75)}.v-text-field--outlined.v-input--dense .v-label{top:10px}.v-text-field--outlined.v-input--dense .v-label--active{-webkit-transform:translateY(-16px) scale(.75);transform:translateY(-16px) scale(.75)}.v-text-field--outlined fieldset{border-style:solid;border-width:1px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:-5px;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:border,border-width;transition-property:border,border-width;-webkit-transition-timing-function:cubic-bezier(.25,.8,.25,1);transition-timing-function:cubic-bezier(.25,.8,.25,1)}.v-application--is-ltr .v-text-field--outlined fieldset{padding-left:8px}.v-application--is-rtl .v-text-field--outlined fieldset{padding-right:8px}.v-text-field--outlined legend{line-height:11px;padding:0;-webkit-transition:width .3s cubic-bezier(.25,.8,.5,1);transition:width .3s cubic-bezier(.25,.8,.5,1)}.v-application--is-ltr .v-text-field--outlined legend{text-align:left}.v-application--is-rtl .v-text-field--outlined legend{text-align:right}.v-application--is-ltr .v-text-field--outlined.v-text-field--rounded legend{margin-left:12px}.v-application--is-rtl .v-text-field--outlined.v-text-field--rounded legend{margin-right:12px}.v-text-field--outlined>.v-input__control>.v-input__slot{background:transparent}.v-text-field--outlined .v-text-field__prefix{max-height:32px}.v-text-field--outlined .v-input__append-outer,.v-text-field--outlined .v-input__prepend-outer{margin-top:18px}.v-text-field--outlined.v-input--has-state fieldset,.v-text-field--outlined.v-input--is-focused fieldset{border:2px solid currentColor}.v-text-field--rounded{border-radius:28px}.v-text-field--rounded>.v-input__control>.v-input__slot{padding:0 24px}.v-text-field--shaped{border-radius:16px 16px 0 0}.v-text-field.v-text-field--solo .v-label{top:calc(50% - 10px)}.v-text-field.v-text-field--solo .v-input__control{min-height:48px;padding:0}.v-text-field.v-text-field--solo.v-input--dense>.v-input__control{min-height:38px}.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot{-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-text-field.v-text-field--solo .v-input__append-inner,.v-text-field.v-text-field--solo .v-input__prepend-inner{-ms-flex-item-align:center;align-self:center;margin-top:0}.v-text-field.v-text-field--solo .v-input__append-outer,.v-text-field.v-text-field--solo .v-input__prepend-outer{margin-top:12px}.v-text-field.v-text-field--solo.v-input--dense .v-input__append-outer,.v-text-field.v-text-field--solo.v-input--dense .v-input__prepend-outer{margin-top:7px}.v-text-field.v-input--is-focused>.v-input__control>.v-input__slot:after{-webkit-transform:scaleX(1);transform:scaleX(1)}.v-text-field.v-input--has-state>.v-input__control>.v-input__slot:before{border-color:currentColor}.theme--light.v-counter{color:rgba(0,0,0,.6)}.theme--dark.v-counter{color:hsla(0,0%,100%,.7)}.v-counter{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;font-size:12px;min-height:12px;line-height:1}.theme--light.v-divider{border-color:rgba(0,0,0,.12)}.theme--dark.v-divider{border-color:hsla(0,0%,100%,.12)}.v-divider{display:block;-webkit-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0px;max-width:100%;height:0;max-height:0;border:solid;border-width:thin 0 0 0;-webkit-transition:inherit;transition:inherit}.v-divider--inset:not(.v-divider--vertical){max-width:calc(100% - 72px)}.v-application--is-ltr .v-divider--inset:not(.v-divider--vertical){margin-left:72px}.v-application--is-rtl .v-divider--inset:not(.v-divider--vertical){margin-right:72px}.v-divider--vertical{-ms-flex-item-align:stretch;align-self:stretch;border:solid;border-width:0 thin 0 0;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:inherit;min-height:100%;max-height:100%;max-width:0;width:0;vertical-align:text-bottom}.v-divider--vertical.v-divider--inset{margin-top:8px;min-height:0;max-height:calc(100% - 16px)} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-65ac8106.108b4a7c.css b/chameleon-server/src/main/resources/web/css/chunk-65ac8106.108b4a7c.css deleted file mode 100644 index bbe212f1c..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-65ac8106.108b4a7c.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#fafafa}.theme--dark.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#424242}.v-input--range-slider.v-input--is-disabled .v-slider__track-fill{display:none}.v-input--range-slider.v-input--is-disabled.v-input--slider .v-slider.v-slider .v-slider__thumb{border-color:transparent}.hover[data-v-3ed7f1e7]:hover{color:#fff!important}.v-tooltip{display:none}.v-tooltip--attached{display:inline}.v-tooltip__content{background:rgba(97,97,97,.9);color:#fff;border-radius:4px;font-size:14px;line-height:22px;display:inline-block;padding:5px 16px;position:absolute;text-transform:none;width:auto;opacity:1;pointer-events:none}.v-tooltip__content--fixed{position:fixed}.v-tooltip__content[class*=-active]{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.v-tooltip__content[class*=enter-active]{-webkit-transition-duration:.15s;transition-duration:.15s}.v-tooltip__content[class*=leave-active]{-webkit-transition-duration:75ms;transition-duration:75ms}.colsClass[data-v-68fd95a0]{padding:0!important}.videoClass[data-v-68fd95a0]{text-align:center}.tableClass[data-v-68fd95a0]{padding-top:5px;width:70%;text-align:center}th[data-v-68fd95a0]{width:80px;text-align:center}.v-input--checkbox.v-input--indeterminate.v-input--is-disabled{opacity:.6}.v-dialog{border-radius:4px;margin:24px;overflow-y:auto;pointer-events:auto;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);width:100%;z-index:inherit;-webkit-box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.v-dialog:not(.v-dialog--fullscreen){max-height:90%}.v-dialog>*{width:100%}.v-dialog>.v-card>.v-card__title{font-size:1.25rem;font-weight:500;letter-spacing:.0125em;padding:16px 24px 10px}.v-dialog>.v-card>.v-card__subtitle,.v-dialog>.v-card>.v-card__text{padding:0 24px 20px}.v-dialog__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:0;pointer-events:none;position:fixed;top:0;-webkit-transition:.2s cubic-bezier(.25,.8,.25,1),z-index 1ms;transition:.2s cubic-bezier(.25,.8,.25,1),z-index 1ms;width:100%;z-index:6;outline:none}.v-dialog__container{display:none}.v-dialog__container--attached{display:inline}.v-dialog--animated{-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-name:animate-dialog;animation-name:animate-dialog;-webkit-animation-timing-function:cubic-bezier(.25,.8,.25,1);animation-timing-function:cubic-bezier(.25,.8,.25,1)}.v-dialog--fullscreen{border-radius:0;margin:0;height:100%;position:fixed;overflow-y:auto;top:0;left:0}.v-dialog--fullscreen>.v-card{min-height:100%;min-width:100%;margin:0!important;padding:0!important}.v-dialog--scrollable,.v-dialog--scrollable>form{display:-webkit-box;display:-ms-flexbox;display:flex}.v-dialog--scrollable>.v-card,.v-dialog--scrollable>form>.v-card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-height:100%;max-width:100%}.v-dialog--scrollable>.v-card>.v-card__actions,.v-dialog--scrollable>.v-card>.v-card__title,.v-dialog--scrollable>form>.v-card>.v-card__actions,.v-dialog--scrollable>form>.v-card>.v-card__title{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.v-dialog--scrollable>.v-card>.v-card__text,.v-dialog--scrollable>form>.v-card>.v-card__text{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow-y:auto}@-webkit-keyframes animate-dialog{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.03);transform:scale(1.03)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes animate-dialog{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.03);transform:scale(1.03)}to{-webkit-transform:scale(1);transform:scale(1)}}.theme--light.v-overlay{color:rgba(0,0,0,.87)}.theme--dark.v-overlay{color:#fff}.v-overlay{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms;transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms}.v-overlay__content{position:relative}.v-overlay__scrim{border-radius:inherit;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;-webkit-transition:inherit;transition:inherit;width:100%;will-change:opacity}.v-overlay--absolute{position:absolute}.v-overlay--active{pointer-events:auto;-ms-touch-action:none;touch-action:none} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-6911ca5e.61379667.css b/chameleon-server/src/main/resources/web/css/chunk-6911ca5e.61379667.css deleted file mode 100644 index afe55e059..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-6911ca5e.61379667.css +++ /dev/null @@ -1 +0,0 @@ -.v-input--checkbox.v-input--indeterminate.v-input--is-disabled{opacity:.6}.videoClass[data-v-7880bdc2]{text-align:center}.videoClass img[data-v-7880bdc2]{padding-top:10px;height:auto!important;width:75%;vertical-align:middle}.colsClass[data-v-7880bdc2]{padding:0!important} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-6e69a154.38f70fef.css b/chameleon-server/src/main/resources/web/css/chunk-6e69a154.38f70fef.css deleted file mode 100644 index 2d603e273..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-6e69a154.38f70fef.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none}.theme--light.v-input--switch .v-input--switch__thumb{color:#fff}.theme--light.v-input--switch .v-input--switch__track{color:rgba(0,0,0,.38)}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#fafafa!important}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:rgba(0,0,0,.12)!important}.theme--dark.v-input--switch .v-input--switch__thumb{color:#bdbdbd}.theme--dark.v-input--switch .v-input--switch__track{color:hsla(0,0%,100%,.3)}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#424242!important}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:hsla(0,0%,100%,.1)!important}.v-input--switch__thumb,.v-input--switch__track{background-color:currentColor;pointer-events:none;-webkit-transition:inherit;transition:inherit}.v-input--switch__track{border-radius:8px;width:36px;height:14px;left:2px;position:absolute;opacity:.6;right:2px;top:calc(50% - 7px)}.v-input--switch__thumb{border-radius:50%;top:calc(50% - 10px);height:20px;position:relative;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-input--switch .v-input--selection-controls__input{width:38px}.v-input--switch .v-input--selection-controls__ripple{top:calc(50% - 24px)}.v-input--switch.v-input--dense .v-input--switch__thumb{width:18px;height:18px}.v-input--switch.v-input--dense .v-input--switch__track{height:12px;width:32px}.v-input--switch.v-input--dense.v-input--switch--inset .v-input--switch__track{height:22px;width:44px;top:calc(50% - 12px);left:-3px}.v-input--switch.v-input--dense .v-input--selection-controls__ripple{top:calc(50% - 22px)}.v-input--switch.v-input--is-dirty.v-input--is-disabled{opacity:.6}.v-application--is-ltr .v-input--switch .v-input--selection-controls__ripple{left:-14px}.v-application--is-ltr .v-input--switch.v-input--dense .v-input--selection-controls__ripple{left:-12px}.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px);transform:translate(20px)}.v-application--is-rtl .v-input--switch .v-input--selection-controls__ripple{right:-14px}.v-application--is-rtl .v-input--switch.v-input--dense .v-input--selection-controls__ripple{right:-12px}.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-20px);transform:translate(-20px)}.v-input--switch:not(.v-input--switch--flat):not(.v-input--switch--inset) .v-input--switch__thumb{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-input--switch--inset .v-input--selection-controls__input,.v-input--switch--inset .v-input--switch__track{width:48px}.v-input--switch--inset .v-input--switch__track{border-radius:14px;height:28px;left:-4px;opacity:.32;top:calc(50% - 14px)}.v-application--is-ltr .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(0)!important;transform:translate(0)!important}.v-application--is-rtl .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset .v-input--switch__thumb{-webkit-transform:translate(-6px)!important;transform:translate(-6px)!important}.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(20px)!important;transform:translate(20px)!important}.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{-webkit-transform:translate(-26px)!important;transform:translate(-26px)!important} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-6f8eef3f.09316a61.css b/chameleon-server/src/main/resources/web/css/chunk-6f8eef3f.09316a61.css deleted file mode 100644 index cd3981f57..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-6f8eef3f.09316a61.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#fafafa}.theme--dark.v-input--range-slider.v-input--slider.v-input--is-disabled .v-slider.v-slider .v-slider__thumb{background:#424242}.v-input--range-slider.v-input--is-disabled .v-slider__track-fill{display:none}.v-input--range-slider.v-input--is-disabled.v-input--slider .v-slider.v-slider .v-slider__thumb{border-color:transparent} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-7d8e2978.c741c172.css b/chameleon-server/src/main/resources/web/css/chunk-7d8e2978.c741c172.css deleted file mode 100644 index 241961b7b..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-7d8e2978.c741c172.css +++ /dev/null @@ -1 +0,0 @@ -.v-input--checkbox.v-input--indeterminate.v-input--is-disabled{opacity:.6}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/css/chunk-vendors.ae417f2a.css b/chameleon-server/src/main/resources/web/css/chunk-vendors.ae417f2a.css deleted file mode 100644 index 5930f2533..000000000 --- a/chameleon-server/src/main/resources/web/css/chunk-vendors.ae417f2a.css +++ /dev/null @@ -1 +0,0 @@ -.theme--light.v-application{background:#fafafa;color:rgba(0,0,0,.87)}.theme--light.v-application .text--primary{color:rgba(0,0,0,.87)!important}.theme--light.v-application .text--secondary{color:rgba(0,0,0,.6)!important}.theme--light.v-application .text--disabled{color:rgba(0,0,0,.38)!important}.theme--dark.v-application{background:#303030;color:#fff}.theme--dark.v-application .text--primary{color:#fff!important}.theme--dark.v-application .text--secondary{color:hsla(0,0%,100%,.7)!important}.theme--dark.v-application .text--disabled{color:hsla(0,0%,100%,.5)!important}.v-application{display:-webkit-box;display:-ms-flexbox;display:flex}.v-application a{cursor:pointer}.v-application--is-rtl{direction:rtl}.v-application--wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:100vh;max-width:100%;position:relative}@-moz-document url-prefix(){@media print{.v-application,.v-application--wrap{display:block}}}.v-app-bar:not([data-booted=true]){-webkit-transition:none!important;transition:none!important}.v-app-bar.v-app-bar--fixed{position:fixed;top:0;z-index:5}.v-app-bar.v-app-bar--hide-shadow{-webkit-box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-app-bar--fade-img-on-scroll .v-toolbar__image .v-image__image{-webkit-transition:opacity .4s cubic-bezier(.4,0,.2,1);transition:opacity .4s cubic-bezier(.4,0,.2,1)}.v-app-bar.v-toolbar--prominent.v-app-bar--shrink-on-scroll .v-toolbar__content{will-change:height}.v-app-bar.v-toolbar--prominent.v-app-bar--shrink-on-scroll .v-toolbar__image{will-change:opacity}.v-app-bar.v-toolbar--prominent.v-app-bar--shrink-on-scroll.v-app-bar--collapse-on-scroll .v-toolbar__extension{display:none}.v-app-bar.v-toolbar--prominent.v-app-bar--shrink-on-scroll.v-app-bar--is-scrolled .v-toolbar__title{padding-top:9px}.v-app-bar.v-toolbar--prominent.v-app-bar--shrink-on-scroll.v-app-bar--is-scrolled:not(.v-app-bar--bottom) .v-toolbar__title{padding-bottom:9px}.v-app-bar.v-app-bar--shrink-on-scroll .v-toolbar__title{font-size:inherit}.v-toolbar{contain:layout;display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%;-webkit-transition:transform .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),left .2s cubic-bezier(.4,0,.2,1),right .2s cubic-bezier(.4,0,.2,1),max-width .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),left .2s cubic-bezier(.4,0,.2,1),right .2s cubic-bezier(.4,0,.2,1),max-width .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),left .2s cubic-bezier(.4,0,.2,1),right .2s cubic-bezier(.4,0,.2,1),box-shadow .28s cubic-bezier(.4,0,.2,1),max-width .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1);transition:transform .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),left .2s cubic-bezier(.4,0,.2,1),right .2s cubic-bezier(.4,0,.2,1),box-shadow .28s cubic-bezier(.4,0,.2,1),max-width .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .28s cubic-bezier(.4,0,.2,1);-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-toolbar .v-input{padding-top:0;margin-top:0}.v-toolbar__content,.v-toolbar__extension{padding:4px 16px}.v-toolbar__content .v-btn.v-btn--icon.v-size--default,.v-toolbar__extension .v-btn.v-btn--icon.v-size--default{height:48px;width:48px}.v-application--is-ltr .v-toolbar__content>.v-btn.v-btn--icon:first-child,.v-application--is-ltr .v-toolbar__extension>.v-btn.v-btn--icon:first-child{margin-left:-12px}.v-application--is-rtl .v-toolbar__content>.v-btn.v-btn--icon:first-child,.v-application--is-rtl .v-toolbar__extension>.v-btn.v-btn--icon:first-child{margin-right:-12px}.v-application--is-ltr .v-toolbar__content>.v-btn.v-btn--icon:first-child+.v-toolbar__title,.v-application--is-ltr .v-toolbar__extension>.v-btn.v-btn--icon:first-child+.v-toolbar__title{padding-left:20px}.v-application--is-rtl .v-toolbar__content>.v-btn.v-btn--icon:first-child+.v-toolbar__title,.v-application--is-rtl .v-toolbar__extension>.v-btn.v-btn--icon:first-child+.v-toolbar__title{padding-right:20px}.v-application--is-ltr .v-toolbar__content>.v-btn.v-btn--icon:last-child,.v-application--is-ltr .v-toolbar__extension>.v-btn.v-btn--icon:last-child{margin-right:-12px}.v-application--is-rtl .v-toolbar__content>.v-btn.v-btn--icon:last-child,.v-application--is-rtl .v-toolbar__extension>.v-btn.v-btn--icon:last-child{margin-left:-12px}.v-toolbar__content>.v-tabs,.v-toolbar__extension>.v-tabs{height:inherit;margin-top:-4px;margin-bottom:-4px}.v-toolbar__content>.v-tabs .v-tabs-bar,.v-toolbar__extension>.v-tabs .v-tabs-bar{height:inherit}.v-toolbar__content>.v-tabs:first-child,.v-toolbar__extension>.v-tabs:first-child{margin-left:-16px}.v-toolbar__content>.v-tabs:last-child,.v-toolbar__extension>.v-tabs:last-child{margin-right:-16px}.v-toolbar__content,.v-toolbar__extension{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;z-index:0}.v-toolbar__image{position:absolute;top:0;bottom:0;width:100%;z-index:0;contain:strict}.v-toolbar__image,.v-toolbar__image .v-image{border-radius:inherit}.v-toolbar__items{display:-webkit-box;display:-ms-flexbox;display:flex;height:inherit}.v-toolbar__items>.v-btn{border-radius:0;height:100%!important;max-height:none}.v-toolbar__title{font-size:1.25rem;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-toolbar.v-toolbar--absolute{position:absolute;top:0;z-index:1}.v-toolbar.v-toolbar--bottom{top:auto;bottom:0}.v-toolbar.v-toolbar--collapse .v-toolbar__title{white-space:nowrap}.v-toolbar.v-toolbar--collapsed{max-width:112px;overflow:hidden}.v-application--is-ltr .v-toolbar.v-toolbar--collapsed{border-bottom-right-radius:24px}.v-application--is-rtl .v-toolbar.v-toolbar--collapsed{border-bottom-left-radius:24px}.v-toolbar.v-toolbar--collapsed .v-toolbar__extension,.v-toolbar.v-toolbar--collapsed .v-toolbar__title{display:none}.v-toolbar--dense .v-toolbar__content,.v-toolbar--dense .v-toolbar__extension{padding-top:0;padding-bottom:0}.v-toolbar--flat{-webkit-box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12);box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-toolbar--floating{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.v-toolbar--prominent .v-toolbar__content{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.v-toolbar--prominent .v-toolbar__title{font-size:1.5rem;padding-top:6px}.v-toolbar--prominent:not(.v-toolbar--bottom) .v-toolbar__title{-ms-flex-item-align:end;align-self:flex-end;padding-bottom:6px;padding-top:0}.theme--light.v-sheet{background-color:#fff;border-color:#fff;color:rgba(0,0,0,.87)}.theme--dark.v-sheet{background-color:#424242;border-color:#424242;color:#fff}.v-sheet{border-radius:4px}.v-sheet--tile{border-radius:0}.v-image{z-index:0}.v-image__image,.v-image__placeholder{z-index:-1;position:absolute;top:0;left:0;width:100%;height:100%}.v-image__image{background-repeat:no-repeat}.v-image__image--preload{-webkit-filter:blur(2px);filter:blur(2px)}.v-image__image--contain{background-size:contain}.v-image__image--cover{background-size:cover}.v-responsive{position:relative;overflow:hidden;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;max-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.v-responsive__content{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0px;max-width:100%}.v-responsive__sizer~.v-responsive__content{margin-left:-100%}.v-responsive__sizer{-webkit-transition:padding-bottom .2s cubic-bezier(.25,.8,.5,1);transition:padding-bottom .2s cubic-bezier(.25,.8,.5,1);-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0px}.container.grow-shrink-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.container.fill-height{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.container.fill-height>.row{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;max-width:100%}.container.fill-height>.layout{height:100%;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.container.fill-height>.layout.grow-shrink-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.container.grid-list-xs .layout .flex{padding:1px}.container.grid-list-xs .layout:only-child{margin:-1px}.container.grid-list-xs .layout:not(:only-child){margin:auto -1px}.container.grid-list-xs :not(:only-child) .layout:first-child{margin-top:-1px}.container.grid-list-xs :not(:only-child) .layout:last-child{margin-bottom:-1px}.container.grid-list-sm .layout .flex{padding:2px}.container.grid-list-sm .layout:only-child{margin:-2px}.container.grid-list-sm .layout:not(:only-child){margin:auto -2px}.container.grid-list-sm :not(:only-child) .layout:first-child{margin-top:-2px}.container.grid-list-sm :not(:only-child) .layout:last-child{margin-bottom:-2px}.container.grid-list-md .layout .flex{padding:4px}.container.grid-list-md .layout:only-child{margin:-4px}.container.grid-list-md .layout:not(:only-child){margin:auto -4px}.container.grid-list-md :not(:only-child) .layout:first-child{margin-top:-4px}.container.grid-list-md :not(:only-child) .layout:last-child{margin-bottom:-4px}.container.grid-list-lg .layout .flex{padding:8px}.container.grid-list-lg .layout:only-child{margin:-8px}.container.grid-list-lg .layout:not(:only-child){margin:auto -8px}.container.grid-list-lg :not(:only-child) .layout:first-child{margin-top:-8px}.container.grid-list-lg :not(:only-child) .layout:last-child{margin-bottom:-8px}.container.grid-list-xl .layout .flex{padding:12px}.container.grid-list-xl .layout:only-child{margin:-12px}.container.grid-list-xl .layout:not(:only-child){margin:auto -12px}.container.grid-list-xl :not(:only-child) .layout:first-child{margin-top:-12px}.container.grid-list-xl :not(:only-child) .layout:last-child{margin-bottom:-12px}.layout{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-wrap:nowrap;flex-wrap:nowrap;min-width:0}.layout.reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.layout.column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.layout.column.reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.layout.column>.flex{max-width:100%}.layout.wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.layout.grow-shrink-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}@media (min-width:0){.flex.xs12{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:100%}.flex.order-xs12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.flex.xs11{-ms-flex-preferred-size:91.6666666667%;flex-basis:91.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:91.6666666667%}.flex.order-xs11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.flex.xs10{-ms-flex-preferred-size:83.3333333333%;flex-basis:83.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:83.3333333333%}.flex.order-xs10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.flex.xs9{-ms-flex-preferred-size:75%;flex-basis:75%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:75%}.flex.order-xs9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.flex.xs8{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:66.6666666667%}.flex.order-xs8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.flex.xs7{-ms-flex-preferred-size:58.3333333333%;flex-basis:58.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:58.3333333333%}.flex.order-xs7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.flex.xs6{-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:50%}.flex.order-xs6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.flex.xs5{-ms-flex-preferred-size:41.6666666667%;flex-basis:41.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:41.6666666667%}.flex.order-xs5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.flex.xs4{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:33.3333333333%}.flex.order-xs4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.flex.xs3{-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:25%}.flex.order-xs3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.flex.xs2{-ms-flex-preferred-size:16.6666666667%;flex-basis:16.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:16.6666666667%}.flex.order-xs2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.flex.xs1{-ms-flex-preferred-size:8.3333333333%;flex-basis:8.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:8.3333333333%}.flex.order-xs1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.flex.offset-xs12{margin-left:100%}.flex.offset-xs11{margin-left:91.6666666667%}.flex.offset-xs10{margin-left:83.3333333333%}.flex.offset-xs9{margin-left:75%}.flex.offset-xs8{margin-left:66.6666666667%}.flex.offset-xs7{margin-left:58.3333333333%}.flex.offset-xs6{margin-left:50%}.flex.offset-xs5{margin-left:41.6666666667%}.flex.offset-xs4{margin-left:33.3333333333%}.flex.offset-xs3{margin-left:25%}.flex.offset-xs2{margin-left:16.6666666667%}.flex.offset-xs1{margin-left:8.3333333333%}.flex.offset-xs0{margin-left:0}}@media (min-width:600px){.flex.sm12{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:100%}.flex.order-sm12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.flex.sm11{-ms-flex-preferred-size:91.6666666667%;flex-basis:91.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:91.6666666667%}.flex.order-sm11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.flex.sm10{-ms-flex-preferred-size:83.3333333333%;flex-basis:83.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:83.3333333333%}.flex.order-sm10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.flex.sm9{-ms-flex-preferred-size:75%;flex-basis:75%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:75%}.flex.order-sm9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.flex.sm8{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:66.6666666667%}.flex.order-sm8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.flex.sm7{-ms-flex-preferred-size:58.3333333333%;flex-basis:58.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:58.3333333333%}.flex.order-sm7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.flex.sm6{-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:50%}.flex.order-sm6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.flex.sm5{-ms-flex-preferred-size:41.6666666667%;flex-basis:41.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:41.6666666667%}.flex.order-sm5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.flex.sm4{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:33.3333333333%}.flex.order-sm4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.flex.sm3{-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:25%}.flex.order-sm3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.flex.sm2{-ms-flex-preferred-size:16.6666666667%;flex-basis:16.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:16.6666666667%}.flex.order-sm2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.flex.sm1{-ms-flex-preferred-size:8.3333333333%;flex-basis:8.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:8.3333333333%}.flex.order-sm1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.flex.offset-sm12{margin-left:100%}.flex.offset-sm11{margin-left:91.6666666667%}.flex.offset-sm10{margin-left:83.3333333333%}.flex.offset-sm9{margin-left:75%}.flex.offset-sm8{margin-left:66.6666666667%}.flex.offset-sm7{margin-left:58.3333333333%}.flex.offset-sm6{margin-left:50%}.flex.offset-sm5{margin-left:41.6666666667%}.flex.offset-sm4{margin-left:33.3333333333%}.flex.offset-sm3{margin-left:25%}.flex.offset-sm2{margin-left:16.6666666667%}.flex.offset-sm1{margin-left:8.3333333333%}.flex.offset-sm0{margin-left:0}}@media (min-width:960px){.flex.md12{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:100%}.flex.order-md12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.flex.md11{-ms-flex-preferred-size:91.6666666667%;flex-basis:91.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:91.6666666667%}.flex.order-md11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.flex.md10{-ms-flex-preferred-size:83.3333333333%;flex-basis:83.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:83.3333333333%}.flex.order-md10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.flex.md9{-ms-flex-preferred-size:75%;flex-basis:75%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:75%}.flex.order-md9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.flex.md8{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:66.6666666667%}.flex.order-md8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.flex.md7{-ms-flex-preferred-size:58.3333333333%;flex-basis:58.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:58.3333333333%}.flex.order-md7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.flex.md6{-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:50%}.flex.order-md6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.flex.md5{-ms-flex-preferred-size:41.6666666667%;flex-basis:41.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:41.6666666667%}.flex.order-md5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.flex.md4{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:33.3333333333%}.flex.order-md4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.flex.md3{-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:25%}.flex.order-md3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.flex.md2{-ms-flex-preferred-size:16.6666666667%;flex-basis:16.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:16.6666666667%}.flex.order-md2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.flex.md1{-ms-flex-preferred-size:8.3333333333%;flex-basis:8.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:8.3333333333%}.flex.order-md1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.flex.offset-md12{margin-left:100%}.flex.offset-md11{margin-left:91.6666666667%}.flex.offset-md10{margin-left:83.3333333333%}.flex.offset-md9{margin-left:75%}.flex.offset-md8{margin-left:66.6666666667%}.flex.offset-md7{margin-left:58.3333333333%}.flex.offset-md6{margin-left:50%}.flex.offset-md5{margin-left:41.6666666667%}.flex.offset-md4{margin-left:33.3333333333%}.flex.offset-md3{margin-left:25%}.flex.offset-md2{margin-left:16.6666666667%}.flex.offset-md1{margin-left:8.3333333333%}.flex.offset-md0{margin-left:0}}@media (min-width:1264px){.flex.lg12{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:100%}.flex.order-lg12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.flex.lg11{-ms-flex-preferred-size:91.6666666667%;flex-basis:91.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:91.6666666667%}.flex.order-lg11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.flex.lg10{-ms-flex-preferred-size:83.3333333333%;flex-basis:83.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:83.3333333333%}.flex.order-lg10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.flex.lg9{-ms-flex-preferred-size:75%;flex-basis:75%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:75%}.flex.order-lg9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.flex.lg8{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:66.6666666667%}.flex.order-lg8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.flex.lg7{-ms-flex-preferred-size:58.3333333333%;flex-basis:58.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:58.3333333333%}.flex.order-lg7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.flex.lg6{-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:50%}.flex.order-lg6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.flex.lg5{-ms-flex-preferred-size:41.6666666667%;flex-basis:41.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:41.6666666667%}.flex.order-lg5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.flex.lg4{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:33.3333333333%}.flex.order-lg4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.flex.lg3{-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:25%}.flex.order-lg3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.flex.lg2{-ms-flex-preferred-size:16.6666666667%;flex-basis:16.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:16.6666666667%}.flex.order-lg2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.flex.lg1{-ms-flex-preferred-size:8.3333333333%;flex-basis:8.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:8.3333333333%}.flex.order-lg1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.flex.offset-lg12{margin-left:100%}.flex.offset-lg11{margin-left:91.6666666667%}.flex.offset-lg10{margin-left:83.3333333333%}.flex.offset-lg9{margin-left:75%}.flex.offset-lg8{margin-left:66.6666666667%}.flex.offset-lg7{margin-left:58.3333333333%}.flex.offset-lg6{margin-left:50%}.flex.offset-lg5{margin-left:41.6666666667%}.flex.offset-lg4{margin-left:33.3333333333%}.flex.offset-lg3{margin-left:25%}.flex.offset-lg2{margin-left:16.6666666667%}.flex.offset-lg1{margin-left:8.3333333333%}.flex.offset-lg0{margin-left:0}}@media (min-width:1904px){.flex.xl12{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:100%}.flex.order-xl12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.flex.xl11{-ms-flex-preferred-size:91.6666666667%;flex-basis:91.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:91.6666666667%}.flex.order-xl11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.flex.xl10{-ms-flex-preferred-size:83.3333333333%;flex-basis:83.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:83.3333333333%}.flex.order-xl10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.flex.xl9{-ms-flex-preferred-size:75%;flex-basis:75%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:75%}.flex.order-xl9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.flex.xl8{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:66.6666666667%}.flex.order-xl8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.flex.xl7{-ms-flex-preferred-size:58.3333333333%;flex-basis:58.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:58.3333333333%}.flex.order-xl7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.flex.xl6{-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:50%}.flex.order-xl6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.flex.xl5{-ms-flex-preferred-size:41.6666666667%;flex-basis:41.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:41.6666666667%}.flex.order-xl5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.flex.xl4{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:33.3333333333%}.flex.order-xl4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.flex.xl3{-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:25%}.flex.order-xl3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.flex.xl2{-ms-flex-preferred-size:16.6666666667%;flex-basis:16.6666666667%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:16.6666666667%}.flex.order-xl2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.flex.xl1{-ms-flex-preferred-size:8.3333333333%;flex-basis:8.3333333333%;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;max-width:8.3333333333%}.flex.order-xl1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.flex.offset-xl12{margin-left:100%}.flex.offset-xl11{margin-left:91.6666666667%}.flex.offset-xl10{margin-left:83.3333333333%}.flex.offset-xl9{margin-left:75%}.flex.offset-xl8{margin-left:66.6666666667%}.flex.offset-xl7{margin-left:58.3333333333%}.flex.offset-xl6{margin-left:50%}.flex.offset-xl5{margin-left:41.6666666667%}.flex.offset-xl4{margin-left:33.3333333333%}.flex.offset-xl3{margin-left:25%}.flex.offset-xl2{margin-left:16.6666666667%}.flex.offset-xl1{margin-left:8.3333333333%}.flex.offset-xl0{margin-left:0}}.child-flex>*,.flex{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%}.child-flex>.grow-shrink-0,.flex.grow-shrink-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.grow,.spacer{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.grow{-ms-flex-negative:0!important;flex-shrink:0!important}.shrink{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important;-ms-flex-negative:1!important;flex-shrink:1!important}.fill-height{height:100%}.container{width:100%;padding:12px;margin-right:auto;margin-left:auto}@media(min-width:960px){.container{max-width:900px}}@media(min-width:1264px){.container{max-width:1185px}}@media(min-width:1904px){.container{max-width:1785px}}.container--fluid{max-width:100%}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:-12px;margin-left:-12px}.row--dense{margin-right:-4px;margin-left:-4px}.row--dense>.col,.row--dense>[class*=col-]{padding:4px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{width:100%;padding:12px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-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,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media(min-width:600px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media(min-width:960px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media(min-width:1264px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media(min-width:1904px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.v-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;max-width:100%;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1)}.v-content:not([data-booted=true]){-webkit-transition:none!important;transition:none!important}.v-content__wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%;position:relative}@-moz-document url-prefix(){@media print{.v-content{display:block}}}.v-snack{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.875rem;left:8px;pointer-events:none;position:fixed;right:8px;-webkit-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);z-index:1000}.v-application--is-ltr .v-snack{text-align:left}.v-application--is-rtl .v-snack{text-align:right}.v-snack--absolute{position:absolute}.v-snack--top{top:8px}.v-snack--bottom{bottom:8px}.v-snack__wrapper{background-color:#323232;border-radius:4px;margin:0 auto;pointer-events:auto;-webkit-transition:inherit;transition:inherit;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;min-width:100%;-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.v-snack__content,.v-snack__wrapper{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.v-snack__content{min-height:48px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;padding:8px 16px;width:100%}.v-snack__content .v-btn.v-btn{color:#fff;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:auto;min-width:auto;padding:8px;width:auto}.v-application--is-ltr .v-snack__content .v-btn.v-btn{margin:0 -8px 0 24px}.v-application--is-rtl .v-snack__content .v-btn.v-btn{margin:0 24px 0 -8px}.v-snack__content .v-btn.v-btn__content{margin:-2px}.v-snack__content .v-btn.v-btn:before{display:none}.v-snack--multi-line .v-snack__content{height:auto;min-height:68px}.v-snack--vertical .v-snack__content{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:auto;padding:16px 16px 8px}.v-snack--vertical .v-snack__content .v-btn.v-btn{-ms-flex-item-align:end;align-self:flex-end;justify-self:flex-end;margin-top:18px}.v-application--is-ltr .v-snack--vertical .v-snack__content .v-btn.v-btn{margin-left:0}.v-application--is-rtl .v-snack--vertical .v-snack__content .v-btn.v-btn{margin-right:0}.v-snack--vertical .v-snack__content .v-btn__content{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0}@media only screen and (min-width:600px){.v-snack__wrapper{min-width:344px;max-width:672px}.v-snack--left .v-snack__wrapper{margin-left:0}.v-snack--right .v-snack__wrapper{margin-right:0}.v-application--is-ltr .v-snack__content .v-btn:first-of-type{margin-left:42px}.v-application--is-rtl .v-snack__content .v-btn:first-of-type{margin-right:42px}}.v-snack-transition-enter .v-snack__wrapper{-webkit-transform:scale(.8);transform:scale(.8)}.v-snack-transition-enter .v-snack__wrapper,.v-snack-transition-leave-to .v-snack__wrapper{opacity:0}.v-ripple__container{border-radius:inherit;width:100%;height:100%;z-index:0;contain:strict}.v-ripple__animation,.v-ripple__container{color:inherit;position:absolute;left:0;top:0;overflow:hidden;pointer-events:none}.v-ripple__animation{border-radius:50%;background:currentColor;opacity:0;will-change:transform,opacity}.v-ripple__animation--enter{-webkit-transition:none;transition:none}.v-ripple__animation--in{-webkit-transition:opacity .1s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .1s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .1s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .1s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.v-ripple__animation--out{-webkit-transition:opacity .3s cubic-bezier(.4,0,.2,1);transition:opacity .3s cubic-bezier(.4,0,.2,1)}.theme--light.v-tabs>.v-tabs-bar{background-color:#fff}.theme--light.v-tabs>.v-tabs-bar .v-tab--disabled,.theme--light.v-tabs>.v-tabs-bar .v-tab:not(.v-tab--active),.theme--light.v-tabs>.v-tabs-bar .v-tab:not(.v-tab--active)>.v-icon{color:rgba(0,0,0,.54)}.theme--light.v-tabs .v-tab:hover:before{opacity:.04}.theme--light.v-tabs .v-tab--active:before,.theme--light.v-tabs .v-tab--active:hover:before,.theme--light.v-tabs .v-tab:focus:before{opacity:.12}.theme--light.v-tabs .v-tab--active:focus:before{opacity:.16}.theme--dark.v-tabs>.v-tabs-bar{background-color:#424242}.theme--dark.v-tabs>.v-tabs-bar .v-tab--disabled,.theme--dark.v-tabs>.v-tabs-bar .v-tab:not(.v-tab--active),.theme--dark.v-tabs>.v-tabs-bar .v-tab:not(.v-tab--active)>.v-icon{color:hsla(0,0%,100%,.6)}.theme--dark.v-tabs .v-tab:hover:before{opacity:.08}.theme--dark.v-tabs .v-tab--active:before,.theme--dark.v-tabs .v-tab--active:hover:before,.theme--dark.v-tabs .v-tab:focus:before{opacity:.24}.theme--dark.v-tabs .v-tab--active:focus:before{opacity:.32}.theme--light.v-tabs-items{background-color:#fff}.theme--dark.v-tabs-items{background-color:#424242}.v-tabs-bar.accent .v-tab,.v-tabs-bar.accent .v-tabs-slider,.v-tabs-bar.error .v-tab,.v-tabs-bar.error .v-tabs-slider,.v-tabs-bar.info .v-tab,.v-tabs-bar.info .v-tabs-slider,.v-tabs-bar.primary .v-tab,.v-tabs-bar.primary .v-tabs-slider,.v-tabs-bar.secondary .v-tab,.v-tabs-bar.secondary .v-tabs-slider,.v-tabs-bar.success .v-tab,.v-tabs-bar.success .v-tabs-slider,.v-tabs-bar.warning .v-tab,.v-tabs-bar.warning .v-tabs-slider{color:#fff}.v-tabs{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.v-tabs .v-menu__activator{height:100%}.v-tabs:not(.v-tabs--vertical) .v-tab{white-space:normal}.v-tabs-bar{border-radius:inherit;height:48px}.v-tabs-bar.v-slide-group--is-overflowing.v-tabs-bar--is-mobile:not(.v-tabs-bar--show-arrows):not(.v-slide-group--has-affixes) .v-slide-group__prev{display:initial;visibility:hidden}.v-tabs-bar.v-item-group>*{cursor:auto}.v-tab{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;font-size:.875rem;font-weight:500;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;letter-spacing:.0892857143em;line-height:normal;min-width:90px;max-width:360px;outline:none;padding:0 16px;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;-webkit-transition:none;transition:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-tab.v-tab{color:inherit}.v-tab:before{background-color:currentColor;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-tab:not(.v-tab-disabled){cursor:pointer}.v-tabs-slider{background-color:currentColor;height:100%;width:100%}.v-tabs-slider-wrapper{bottom:0;margin:0!important;position:absolute;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);z-index:1}.v-application--is-ltr .v-tabs--align-with-title>.v-tabs-bar:not(.v-tabs-bar--show-arrows)>.v-slide-group__wrapper>.v-tabs-bar__content>.v-tab:first-child,.v-application--is-ltr .v-tabs--align-with-title>.v-tabs-bar:not(.v-tabs-bar--show-arrows)>.v-slide-group__wrapper>.v-tabs-bar__content>.v-tabs-slider-wrapper+.v-tab{margin-left:42px}.v-application--is-rtl .v-tabs--align-with-title>.v-tabs-bar:not(.v-tabs-bar--show-arrows)>.v-slide-group__wrapper>.v-tabs-bar__content>.v-tab:first-child,.v-application--is-rtl .v-tabs--align-with-title>.v-tabs-bar:not(.v-tabs-bar--show-arrows)>.v-slide-group__wrapper>.v-tabs-bar__content>.v-tabs-slider-wrapper+.v-tab{margin-right:42px}.v-application--is-ltr .v-tabs--centered>.v-tabs-bar .v-tabs-bar__content>:last-child,.v-application--is-ltr .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-bar__content>:last-child{margin-right:auto}.v-application--is-ltr .v-tabs--centered>.v-tabs-bar .v-tabs-bar__content>:first-child:not(.v-tabs-slider-wrapper),.v-application--is-ltr .v-tabs--centered>.v-tabs-bar .v-tabs-slider-wrapper+*,.v-application--is-ltr .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-bar__content>:first-child:not(.v-tabs-slider-wrapper),.v-application--is-ltr .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-slider-wrapper+*,.v-application--is-rtl .v-tabs--centered>.v-tabs-bar .v-tabs-bar__content>:last-child,.v-application--is-rtl .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-bar__content>:last-child{margin-left:auto}.v-application--is-rtl .v-tabs--centered>.v-tabs-bar .v-tabs-bar__content>:first-child:not(.v-tabs-slider-wrapper),.v-application--is-rtl .v-tabs--centered>.v-tabs-bar .v-tabs-slider-wrapper+*,.v-application--is-rtl .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-bar__content>:first-child:not(.v-tabs-slider-wrapper),.v-application--is-rtl .v-tabs--fixed-tabs>.v-tabs-bar .v-tabs-slider-wrapper+*{margin-right:auto}.v-tabs--fixed-tabs>.v-tabs-bar .v-tab{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:100%}.v-tabs--grow>.v-tabs-bar .v-tab{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;max-width:none}.v-tabs--icons-and-text>.v-tabs-bar{height:72px}.v-tabs--icons-and-text>.v-tabs-bar .v-tab{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.v-tabs--icons-and-text>.v-tabs-bar .v-tab>:first-child{margin-bottom:6px}.v-tabs--overflow>.v-tabs-bar .v-tab{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}.v-application--is-ltr .v-tabs--right>.v-tabs-bar .v-tab:first-child,.v-application--is-ltr .v-tabs--right>.v-tabs-bar .v-tabs-slider-wrapper+.v-tab{margin-left:auto}.v-application--is-rtl .v-tabs--right>.v-tabs-bar .v-tab:first-child,.v-application--is-rtl .v-tabs--right>.v-tabs-bar .v-tabs-slider-wrapper+.v-tab{margin-right:auto}.v-application--is-ltr .v-tabs--right>.v-tabs-bar .v-tab:last-child{margin-right:0}.v-application--is-rtl .v-tabs--right>.v-tabs-bar .v-tab:last-child{margin-left:0}.v-tabs--vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.v-tabs--vertical>.v-tabs-bar{height:auto}.v-tabs--vertical>.v-tabs-bar .v-tabs-bar__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.v-tabs--vertical>.v-tabs-bar .v-tab{height:48px}.v-tabs--vertical>.v-tabs-bar .v-tabs-slider{height:100%}.v-tabs--vertical>.v-window{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.v-tabs--vertical.v-tabs--icons-and-text>.v-tabs-bar .v-tab{height:72px}.v-tab--active{color:inherit}.v-tab--active.v-tab:not(:focus):before{opacity:0}.v-tab--active .v-icon{color:inherit}.v-tab--disabled{pointer-events:none;opacity:.5}.v-slide-group{display:-webkit-box;display:-ms-flexbox;display:flex}.v-slide-group:not(.v-slide-group--has-affixes) .v-slide-group__next,.v-slide-group:not(.v-slide-group--has-affixes) .v-slide-group__prev{display:none}.v-slide-group.v-item-group>.v-slide-group__next,.v-slide-group.v-item-group>.v-slide-group__prev{cursor:pointer}.v-slide-item{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-slide-group__next,.v-slide-group__prev{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 1 52px;flex:0 1 52px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-width:52px}.v-slide-group__content{-ms-flex:1 0 auto;flex:1 0 auto;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1);white-space:nowrap}.v-slide-group__content,.v-slide-group__wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1}.v-slide-group__wrapper{contain:content;-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden}.v-slide-group__next--disabled,.v-slide-group__prev--disabled{pointer-events:none}.v-item-group{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;position:relative;max-width:100%;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.theme--light.v-icon{color:rgba(0,0,0,.54)}.theme--light.v-icon--disabled{color:rgba(0,0,0,.38)!important}.theme--dark.v-icon{color:#fff}.theme--dark.v-icon--disabled{color:hsla(0,0%,100%,.5)!important}.v-icon.v-icon{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-font-feature-settings:"liga";font-feature-settings:"liga";font-size:24px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;letter-spacing:normal;line-height:1;text-indent:0;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1),visibility 0s;transition:.3s cubic-bezier(.25,.8,.5,1),visibility 0s;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-icon.v-icon--dense{font-size:20px}.v-icon--right{margin-left:8px}.v-icon--left{margin-right:8px}.v-icon.v-icon.v-icon--link{cursor:pointer}.v-icon--disabled{pointer-events:none;opacity:.6}.v-icon--is-component,.v-icon--svg{height:24px;width:24px}.v-icon--svg{fill:currentColor}.v-icon--dense--is-component{height:20px}.v-window__container{height:inherit;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window__container--is-active{overflow:hidden}.v-window__next,.v-window__prev{background:rgba(0,0,0,.3);border-radius:50%;position:absolute;margin:0 16px;top:calc(50% - 20px);z-index:1}.v-window__next .v-btn:hover,.v-window__prev .v-btn:hover{background:none}.v-application--is-ltr .v-window__prev{left:0}.v-application--is-ltr .v-window__next,.v-application--is-rtl .v-window__prev{right:0}.v-application--is-rtl .v-window__next{left:0}.v-window--show-arrows-on-hover{overflow:hidden}.v-window--show-arrows-on-hover .v-window__next,.v-window--show-arrows-on-hover .v-window__prev{-webkit-transition:transform .2s cubic-bezier(.25,.8,.5,1);transition:transform .2s cubic-bezier(.25,.8,.5,1)}.v-application--is-ltr .v-window--show-arrows-on-hover .v-window__prev{-webkit-transform:translateX(-200%);transform:translateX(-200%)}.v-application--is-ltr .v-window--show-arrows-on-hover .v-window__next,.v-application--is-rtl .v-window--show-arrows-on-hover .v-window__prev{-webkit-transform:translateX(200%);transform:translateX(200%)}.v-application--is-rtl .v-window--show-arrows-on-hover .v-window__next{-webkit-transform:translateX(-200%);transform:translateX(-200%)}.v-window--show-arrows-on-hover:hover .v-window__next,.v-window--show-arrows-on-hover:hover .v-window__prev{-webkit-transform:translateX(0);transform:translateX(0)}.v-window-x-reverse-transition-enter-active,.v-window-x-reverse-transition-leave-active,.v-window-x-transition-enter-active,.v-window-x-transition-leave-active,.v-window-y-reverse-transition-enter-active,.v-window-y-reverse-transition-leave-active,.v-window-y-transition-enter-active,.v-window-y-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window-x-reverse-transition-leave,.v-window-x-reverse-transition-leave-to,.v-window-x-transition-leave,.v-window-x-transition-leave-to,.v-window-y-reverse-transition-leave,.v-window-y-reverse-transition-leave-to,.v-window-y-transition-leave,.v-window-y-transition-leave-to{position:absolute!important;top:0;width:100%}.v-window-x-transition-enter{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-window-x-reverse-transition-enter,.v-window-x-transition-leave-to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.v-window-x-reverse-transition-leave-to{-webkit-transform:translateX(100%);transform:translateX(100%)}.v-window-y-transition-enter{-webkit-transform:translateY(100%);transform:translateY(100%)}.v-window-y-reverse-transition-enter,.v-window-y-transition-leave-to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.v-window-y-reverse-transition-leave-to{-webkit-transform:translateY(100%);transform:translateY(100%)}.v-btn:not(.v-btn--outlined).accent,.v-btn:not(.v-btn--outlined).error,.v-btn:not(.v-btn--outlined).info,.v-btn:not(.v-btn--outlined).primary,.v-btn:not(.v-btn--outlined).secondary,.v-btn:not(.v-btn--outlined).success,.v-btn:not(.v-btn--outlined).warning{color:#fff}.theme--light.v-btn{color:rgba(0,0,0,.87)}.theme--light.v-btn.v-btn--disabled,.theme--light.v-btn.v-btn--disabled .v-btn__loading,.theme--light.v-btn.v-btn--disabled .v-icon{color:rgba(0,0,0,.26)!important}.theme--light.v-btn.v-btn--disabled:not(.v-btn--flat):not(.v-btn--text):not(.v-btn--outlined){background-color:rgba(0,0,0,.12)!important}.theme--light.v-btn:not(.v-btn--flat):not(.v-btn--text):not(.v-btn--outlined){background-color:#f5f5f5}.theme--light.v-btn.v-btn--outlined.v-btn--text{border-color:rgba(0,0,0,.12)}.theme--light.v-btn.v-btn--icon{color:rgba(0,0,0,.54)}.theme--light.v-btn:hover:before{opacity:.04}.theme--light.v-btn--active:before,.theme--light.v-btn--active:hover:before,.theme--light.v-btn:focus:before{opacity:.12}.theme--light.v-btn--active:focus:before{opacity:.16}.theme--dark.v-btn{color:#fff}.theme--dark.v-btn.v-btn--disabled,.theme--dark.v-btn.v-btn--disabled .v-btn__loading,.theme--dark.v-btn.v-btn--disabled .v-icon{color:hsla(0,0%,100%,.3)!important}.theme--dark.v-btn.v-btn--disabled:not(.v-btn--flat):not(.v-btn--text):not(.v-btn--outlined){background-color:hsla(0,0%,100%,.12)!important}.theme--dark.v-btn:not(.v-btn--flat):not(.v-btn--text):not(.v-btn--outlined){background-color:#212121}.theme--dark.v-btn.v-btn--outlined.v-btn--text{border-color:hsla(0,0%,100%,.12)}.theme--dark.v-btn.v-btn--icon{color:#fff}.theme--dark.v-btn:hover:before{opacity:.08}.theme--dark.v-btn--active:before,.theme--dark.v-btn--active:hover:before,.theme--dark.v-btn:focus:before{opacity:.24}.theme--dark.v-btn--active:focus:before{opacity:.32}.v-btn{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:4px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;font-weight:500;letter-spacing:.0892857143em;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;outline:0;position:relative;text-decoration:none;text-indent:.0892857143em;text-transform:uppercase;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-property:opacity,-webkit-box-shadow,-webkit-transform;transition-property:opacity,-webkit-box-shadow,-webkit-transform;transition-property:box-shadow,transform,opacity;transition-property:box-shadow,transform,opacity,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.v-btn.v-size--x-small{font-size:.625rem}.v-btn.v-size--small{font-size:.75rem}.v-btn.v-size--default,.v-btn.v-size--large{font-size:.875rem}.v-btn.v-size--x-large{font-size:1rem}.v-btn:before{border-radius:inherit;bottom:0;color:inherit;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.6,1);transition:opacity .2s cubic-bezier(.4,0,.6,1);background-color:currentColor}.v-btn:not(.v-btn--disabled){will-change:box-shadow}.v-btn:not(.v-btn--round).v-size--x-small{height:20px;min-width:36px;padding:0 8.8888888889px}.v-btn:not(.v-btn--round).v-size--small{height:28px;min-width:50px;padding:0 12.4444444444px}.v-btn:not(.v-btn--round).v-size--default{height:36px;min-width:64px;padding:0 16px}.v-btn:not(.v-btn--round).v-size--large{height:44px;min-width:78px;padding:0 19.5555555556px}.v-btn:not(.v-btn--round).v-size--x-large{height:52px;min-width:92px;padding:0 23.1111111111px}.v-btn>.v-btn__content .v-icon{color:inherit}.v-btn__content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit;line-height:normal;position:relative}.v-btn__content .v-icon--left,.v-btn__content .v-icon--right{font-size:18px;height:18px;width:18px}.v-application--is-ltr .v-btn__content .v-icon--left{margin-left:-4px;margin-right:8px}.v-application--is-ltr .v-btn__content .v-icon--right,.v-application--is-rtl .v-btn__content .v-icon--left{margin-left:8px;margin-right:-4px}.v-application--is-rtl .v-btn__content .v-icon--right{margin-left:-4px;margin-right:8px}.v-btn__loader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:0;position:absolute;top:0;width:100%}.v-btn:not(.v-btn--text):not(.v-btn--outlined).v-btn--active:before{opacity:.18}.v-btn:not(.v-btn--text):not(.v-btn--outlined):hover:before{opacity:.08}.v-btn:not(.v-btn--text):not(.v-btn--outlined):focus:before{opacity:.24}.v-btn--absolute,.v-btn--fixed{position:absolute}.v-btn--absolute.v-btn--right,.v-btn--fixed.v-btn--right{right:16px}.v-btn--absolute.v-btn--left,.v-btn--fixed.v-btn--left{left:16px}.v-btn--absolute.v-btn--top,.v-btn--fixed.v-btn--top{top:16px}.v-btn--absolute.v-btn--bottom,.v-btn--fixed.v-btn--bottom{bottom:16px}.v-btn--block{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;min-width:100%!important;max-width:auto}.v-btn--contained{-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-btn--contained:after{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-btn--contained:active{-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-btn--depressed{-webkit-box-shadow:none!important;box-shadow:none!important}.v-btn--disabled{-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.v-btn--fab,.v-btn--icon{min-height:0;min-width:0;padding:0}.v-btn--fab.v-size--x-small .v-icon,.v-btn--icon.v-size--x-small .v-icon{height:18px;font-size:18px;width:18px}.v-btn--fab.v-size--default .v-icon,.v-btn--fab.v-size--small .v-icon,.v-btn--icon.v-size--default .v-icon,.v-btn--icon.v-size--small .v-icon{height:24px;font-size:24px;width:24px}.v-btn--fab.v-size--large .v-icon,.v-btn--icon.v-size--large .v-icon{height:28px;font-size:28px;width:28px}.v-btn--fab.v-size--x-large .v-icon,.v-btn--icon.v-size--x-large .v-icon{height:32px;font-size:32px;width:32px}.v-btn--icon.v-size--x-small{height:20px;width:20px}.v-btn--icon.v-size--small{height:28px;width:28px}.v-btn--icon.v-size--default{height:36px;width:36px}.v-btn--icon.v-size--large{height:44px;width:44px}.v-btn--icon.v-size--x-large{height:52px;width:52px}.v-btn--fab.v-btn--contained{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.v-btn--fab.v-btn--contained:after{-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-btn--fab.v-btn--contained:active{-webkit-box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12);box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.v-btn--fab.v-btn--absolute,.v-btn--fab.v-btn--fixed{z-index:4}.v-btn--fab.v-size--x-small{height:32px;width:32px}.v-btn--fab.v-size--x-small.v-btn--absolute.v-btn--bottom{bottom:-16px}.v-btn--fab.v-size--x-small.v-btn--absolute.v-btn--top{top:-16px}.v-btn--fab.v-size--small{height:40px;width:40px}.v-btn--fab.v-size--small.v-btn--absolute.v-btn--bottom{bottom:-20px}.v-btn--fab.v-size--small.v-btn--absolute.v-btn--top{top:-20px}.v-btn--fab.v-size--default{height:56px;width:56px}.v-btn--fab.v-size--default.v-btn--absolute.v-btn--bottom{bottom:-28px}.v-btn--fab.v-size--default.v-btn--absolute.v-btn--top{top:-28px}.v-btn--fab.v-size--large{height:64px;width:64px}.v-btn--fab.v-size--large.v-btn--absolute.v-btn--bottom{bottom:-32px}.v-btn--fab.v-size--large.v-btn--absolute.v-btn--top{top:-32px}.v-btn--fab.v-size--x-large{height:72px;width:72px}.v-btn--fab.v-size--x-large.v-btn--absolute.v-btn--bottom{bottom:-36px}.v-btn--fab.v-size--x-large.v-btn--absolute.v-btn--top{top:-36px}.v-btn--fixed{position:fixed}.v-btn--loading{pointer-events:none;-webkit-transition:none;transition:none}.v-btn--loading .v-btn__content{opacity:0}.v-btn--outlined{border:thin solid currentColor}.v-btn--outlined:before{border-radius:0}.v-btn--outlined .v-btn__content .v-icon,.v-btn--round .v-btn__content .v-icon{color:currentColor}.v-btn--flat,.v-btn--outlined,.v-btn--text{background-color:transparent}.v-btn--round:before,.v-btn--rounded:before{border-radius:inherit}.v-btn--round{border-radius:50%}.v-btn--rounded{border-radius:28px}.v-btn--tile{border-radius:0}.v-progress-circular{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.v-progress-circular svg{width:100%;height:100%;margin:auto;position:absolute;top:0;bottom:0;left:0;right:0;z-index:0}.v-progress-circular--indeterminate svg{-webkit-animation:progress-circular-rotate 1.4s linear infinite;animation:progress-circular-rotate 1.4s linear infinite;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.v-progress-circular--indeterminate .v-progress-circular__overlay{-webkit-animation:progress-circular-dash 1.4s ease-in-out infinite;animation:progress-circular-dash 1.4s ease-in-out infinite;stroke-linecap:round;stroke-dasharray:80,200;stroke-dashoffset:0px}.v-progress-circular__info{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.v-progress-circular__underlay{stroke:rgba(0,0,0,.1);z-index:1}.v-progress-circular__overlay{stroke:currentColor;z-index:2;-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}@-webkit-keyframes progress-circular-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-125px}}@keyframes progress-circular-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-125px}}@-webkit-keyframes progress-circular-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes progress-circular-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@font-face{font-family:Material Design Icons;src:url(../fonts/materialdesignicons-webfont.f81583fc.eot);src:url(../fonts/materialdesignicons-webfont.f81583fc.eot?#iefix&v=4.7.95) format("embedded-opentype"),url(../fonts/materialdesignicons-webfont.927457ed.woff2) format("woff2"),url(../fonts/materialdesignicons-webfont.d6e3eba9.woff) format("woff"),url(../fonts/materialdesignicons-webfont.1618c77b.ttf) format("truetype");font-weight:400;font-style:normal}.mdi-set,.mdi:before{display:inline-block;font:normal normal normal 24px/1 Material Design Icons;font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing:before{content:"\F001C"}.mdi-access-point:before{content:"\F002"}.mdi-access-point-network:before{content:"\F003"}.mdi-access-point-network-off:before{content:"\FBBD"}.mdi-account:before{content:"\F004"}.mdi-account-alert:before{content:"\F005"}.mdi-account-alert-outline:before{content:"\FB2C"}.mdi-account-arrow-left:before{content:"\FB2D"}.mdi-account-arrow-left-outline:before{content:"\FB2E"}.mdi-account-arrow-right:before{content:"\FB2F"}.mdi-account-arrow-right-outline:before{content:"\FB30"}.mdi-account-badge:before{content:"\FD83"}.mdi-account-badge-alert:before{content:"\FD84"}.mdi-account-badge-alert-outline:before{content:"\FD85"}.mdi-account-badge-horizontal:before{content:"\FDF0"}.mdi-account-badge-horizontal-outline:before{content:"\FDF1"}.mdi-account-badge-outline:before{content:"\FD86"}.mdi-account-box:before{content:"\F006"}.mdi-account-box-multiple:before{content:"\F933"}.mdi-account-box-multiple-outline:before{content:"\F002C"}.mdi-account-box-outline:before{content:"\F007"}.mdi-account-card-details:before{content:"\F5D2"}.mdi-account-card-details-outline:before{content:"\FD87"}.mdi-account-cash:before{content:"\F00C2"}.mdi-account-cash-outline:before{content:"\F00C3"}.mdi-account-check:before{content:"\F008"}.mdi-account-check-outline:before{content:"\FBBE"}.mdi-account-child:before{content:"\FA88"}.mdi-account-child-circle:before{content:"\FA89"}.mdi-account-child-outline:before{content:"\F00F3"}.mdi-account-circle:before{content:"\F009"}.mdi-account-circle-outline:before{content:"\FB31"}.mdi-account-clock:before{content:"\FB32"}.mdi-account-clock-outline:before{content:"\FB33"}.mdi-account-convert:before{content:"\F00A"}.mdi-account-details:before{content:"\F631"}.mdi-account-edit:before{content:"\F6BB"}.mdi-account-edit-outline:before{content:"\F001D"}.mdi-account-group:before{content:"\F848"}.mdi-account-group-outline:before{content:"\FB34"}.mdi-account-heart:before{content:"\F898"}.mdi-account-heart-outline:before{content:"\FBBF"}.mdi-account-key:before{content:"\F00B"}.mdi-account-key-outline:before{content:"\FBC0"}.mdi-account-lock:before{content:"\F0189"}.mdi-account-lock-outline:before{content:"\F018A"}.mdi-account-minus:before{content:"\F00D"}.mdi-account-minus-outline:before{content:"\FAEB"}.mdi-account-multiple:before{content:"\F00E"}.mdi-account-multiple-check:before{content:"\F8C4"}.mdi-account-multiple-check-outline:before{content:"\F0229"}.mdi-account-multiple-minus:before{content:"\F5D3"}.mdi-account-multiple-minus-outline:before{content:"\FBC1"}.mdi-account-multiple-outline:before{content:"\F00F"}.mdi-account-multiple-plus:before{content:"\F010"}.mdi-account-multiple-plus-outline:before{content:"\F7FF"}.mdi-account-multiple-remove:before{content:"\F0235"}.mdi-account-multiple-remove-outline:before{content:"\F0236"}.mdi-account-network:before{content:"\F011"}.mdi-account-network-outline:before{content:"\FBC2"}.mdi-account-off:before{content:"\F012"}.mdi-account-off-outline:before{content:"\FBC3"}.mdi-account-outline:before{content:"\F013"}.mdi-account-plus:before{content:"\F014"}.mdi-account-plus-outline:before{content:"\F800"}.mdi-account-question:before{content:"\FB35"}.mdi-account-question-outline:before{content:"\FB36"}.mdi-account-remove:before{content:"\F015"}.mdi-account-remove-outline:before{content:"\FAEC"}.mdi-account-search:before{content:"\F016"}.mdi-account-search-outline:before{content:"\F934"}.mdi-account-settings:before{content:"\F630"}.mdi-account-settings-outline:before{content:"\F00F4"}.mdi-account-star:before{content:"\F017"}.mdi-account-star-outline:before{content:"\FBC4"}.mdi-account-supervisor:before{content:"\FA8A"}.mdi-account-supervisor-circle:before{content:"\FA8B"}.mdi-account-supervisor-outline:before{content:"\F0158"}.mdi-account-switch:before{content:"\F019"}.mdi-account-tie:before{content:"\FCBF"}.mdi-account-tie-outline:before{content:"\F00F5"}.mdi-accusoft:before{content:"\F849"}.mdi-adchoices:before{content:"\FD1E"}.mdi-adjust:before{content:"\F01A"}.mdi-adobe:before{content:"\F935"}.mdi-adobe-acrobat:before{content:"\FFBD"}.mdi-air-conditioner:before{content:"\F01B"}.mdi-air-filter:before{content:"\FD1F"}.mdi-air-horn:before{content:"\FD88"}.mdi-air-humidifier:before{content:"\F00C4"}.mdi-air-purifier:before{content:"\FD20"}.mdi-airbag:before{content:"\FBC5"}.mdi-airballoon:before{content:"\F01C"}.mdi-airballoon-outline:before{content:"\F002D"}.mdi-airplane:before{content:"\F01D"}.mdi-airplane-landing:before{content:"\F5D4"}.mdi-airplane-off:before{content:"\F01E"}.mdi-airplane-takeoff:before{content:"\F5D5"}.mdi-airplay:before{content:"\F01F"}.mdi-airport:before{content:"\F84A"}.mdi-alarm:before{content:"\F020"}.mdi-alarm-bell:before{content:"\F78D"}.mdi-alarm-check:before{content:"\F021"}.mdi-alarm-light:before{content:"\F78E"}.mdi-alarm-light-outline:before{content:"\FBC6"}.mdi-alarm-multiple:before{content:"\F022"}.mdi-alarm-note:before{content:"\FE8E"}.mdi-alarm-note-off:before{content:"\FE8F"}.mdi-alarm-off:before{content:"\F023"}.mdi-alarm-plus:before{content:"\F024"}.mdi-alarm-snooze:before{content:"\F68D"}.mdi-album:before{content:"\F025"}.mdi-alert:before{content:"\F026"}.mdi-alert-box:before{content:"\F027"}.mdi-alert-box-outline:before{content:"\FCC0"}.mdi-alert-circle:before{content:"\F028"}.mdi-alert-circle-check:before{content:"\F0218"}.mdi-alert-circle-check-outline:before{content:"\F0219"}.mdi-alert-circle-outline:before{content:"\F5D6"}.mdi-alert-decagram:before{content:"\F6BC"}.mdi-alert-decagram-outline:before{content:"\FCC1"}.mdi-alert-octagon:before{content:"\F029"}.mdi-alert-octagon-outline:before{content:"\FCC2"}.mdi-alert-octagram:before{content:"\F766"}.mdi-alert-octagram-outline:before{content:"\FCC3"}.mdi-alert-outline:before{content:"\F02A"}.mdi-alert-rhombus:before{content:"\F01F9"}.mdi-alert-rhombus-outline:before{content:"\F01FA"}.mdi-alien:before{content:"\F899"}.mdi-alien-outline:before{content:"\F00F6"}.mdi-align-horizontal-center:before{content:"\F01EE"}.mdi-align-horizontal-left:before{content:"\F01ED"}.mdi-align-horizontal-right:before{content:"\F01EF"}.mdi-align-vertical-bottom:before{content:"\F01F0"}.mdi-align-vertical-center:before{content:"\F01F1"}.mdi-align-vertical-top:before{content:"\F01F2"}.mdi-all-inclusive:before{content:"\F6BD"}.mdi-allergy:before{content:"\F0283"}.mdi-alpha:before{content:"\F02B"}.mdi-alpha-a:before{content:"A"}.mdi-alpha-a-box:before{content:"\FAED"}.mdi-alpha-a-box-outline:before{content:"\FBC7"}.mdi-alpha-a-circle:before{content:"\FBC8"}.mdi-alpha-a-circle-outline:before{content:"\FBC9"}.mdi-alpha-b:before{content:"B"}.mdi-alpha-b-box:before{content:"\FAEE"}.mdi-alpha-b-box-outline:before{content:"\FBCA"}.mdi-alpha-b-circle:before{content:"\FBCB"}.mdi-alpha-b-circle-outline:before{content:"\FBCC"}.mdi-alpha-c:before{content:"C"}.mdi-alpha-c-box:before{content:"\FAEF"}.mdi-alpha-c-box-outline:before{content:"\FBCD"}.mdi-alpha-c-circle:before{content:"\FBCE"}.mdi-alpha-c-circle-outline:before{content:"\FBCF"}.mdi-alpha-d:before{content:"D"}.mdi-alpha-d-box:before{content:"\FAF0"}.mdi-alpha-d-box-outline:before{content:"\FBD0"}.mdi-alpha-d-circle:before{content:"\FBD1"}.mdi-alpha-d-circle-outline:before{content:"\FBD2"}.mdi-alpha-e:before{content:"E"}.mdi-alpha-e-box:before{content:"\FAF1"}.mdi-alpha-e-box-outline:before{content:"\FBD3"}.mdi-alpha-e-circle:before{content:"\FBD4"}.mdi-alpha-e-circle-outline:before{content:"\FBD5"}.mdi-alpha-f:before{content:"F"}.mdi-alpha-f-box:before{content:"\FAF2"}.mdi-alpha-f-box-outline:before{content:"\FBD6"}.mdi-alpha-f-circle:before{content:"\FBD7"}.mdi-alpha-f-circle-outline:before{content:"\FBD8"}.mdi-alpha-g:before{content:"G"}.mdi-alpha-g-box:before{content:"\FAF3"}.mdi-alpha-g-box-outline:before{content:"\FBD9"}.mdi-alpha-g-circle:before{content:"\FBDA"}.mdi-alpha-g-circle-outline:before{content:"\FBDB"}.mdi-alpha-h:before{content:"H"}.mdi-alpha-h-box:before{content:"\FAF4"}.mdi-alpha-h-box-outline:before{content:"\FBDC"}.mdi-alpha-h-circle:before{content:"\FBDD"}.mdi-alpha-h-circle-outline:before{content:"\FBDE"}.mdi-alpha-i:before{content:"I"}.mdi-alpha-i-box:before{content:"\FAF5"}.mdi-alpha-i-box-outline:before{content:"\FBDF"}.mdi-alpha-i-circle:before{content:"\FBE0"}.mdi-alpha-i-circle-outline:before{content:"\FBE1"}.mdi-alpha-j:before{content:"J"}.mdi-alpha-j-box:before{content:"\FAF6"}.mdi-alpha-j-box-outline:before{content:"\FBE2"}.mdi-alpha-j-circle:before{content:"\FBE3"}.mdi-alpha-j-circle-outline:before{content:"\FBE4"}.mdi-alpha-k:before{content:"K"}.mdi-alpha-k-box:before{content:"\FAF7"}.mdi-alpha-k-box-outline:before{content:"\FBE5"}.mdi-alpha-k-circle:before{content:"\FBE6"}.mdi-alpha-k-circle-outline:before{content:"\FBE7"}.mdi-alpha-l:before{content:"L"}.mdi-alpha-l-box:before{content:"\FAF8"}.mdi-alpha-l-box-outline:before{content:"\FBE8"}.mdi-alpha-l-circle:before{content:"\FBE9"}.mdi-alpha-l-circle-outline:before{content:"\FBEA"}.mdi-alpha-m:before{content:"M"}.mdi-alpha-m-box:before{content:"\FAF9"}.mdi-alpha-m-box-outline:before{content:"\FBEB"}.mdi-alpha-m-circle:before{content:"\FBEC"}.mdi-alpha-m-circle-outline:before{content:"\FBED"}.mdi-alpha-n:before{content:"N"}.mdi-alpha-n-box:before{content:"\FAFA"}.mdi-alpha-n-box-outline:before{content:"\FBEE"}.mdi-alpha-n-circle:before{content:"\FBEF"}.mdi-alpha-n-circle-outline:before{content:"\FBF0"}.mdi-alpha-o:before{content:"O"}.mdi-alpha-o-box:before{content:"\FAFB"}.mdi-alpha-o-box-outline:before{content:"\FBF1"}.mdi-alpha-o-circle:before{content:"\FBF2"}.mdi-alpha-o-circle-outline:before{content:"\FBF3"}.mdi-alpha-p:before{content:"P"}.mdi-alpha-p-box:before{content:"\FAFC"}.mdi-alpha-p-box-outline:before{content:"\FBF4"}.mdi-alpha-p-circle:before{content:"\FBF5"}.mdi-alpha-p-circle-outline:before{content:"\FBF6"}.mdi-alpha-q:before{content:"Q"}.mdi-alpha-q-box:before{content:"\FAFD"}.mdi-alpha-q-box-outline:before{content:"\FBF7"}.mdi-alpha-q-circle:before{content:"\FBF8"}.mdi-alpha-q-circle-outline:before{content:"\FBF9"}.mdi-alpha-r:before{content:"R"}.mdi-alpha-r-box:before{content:"\FAFE"}.mdi-alpha-r-box-outline:before{content:"\FBFA"}.mdi-alpha-r-circle:before{content:"\FBFB"}.mdi-alpha-r-circle-outline:before{content:"\FBFC"}.mdi-alpha-s:before{content:"S"}.mdi-alpha-s-box:before{content:"\FAFF"}.mdi-alpha-s-box-outline:before{content:"\FBFD"}.mdi-alpha-s-circle:before{content:"\FBFE"}.mdi-alpha-s-circle-outline:before{content:"\FBFF"}.mdi-alpha-t:before{content:"T"}.mdi-alpha-t-box:before{content:"\FB00"}.mdi-alpha-t-box-outline:before{content:"\FC00"}.mdi-alpha-t-circle:before{content:"\FC01"}.mdi-alpha-t-circle-outline:before{content:"\FC02"}.mdi-alpha-u:before{content:"U"}.mdi-alpha-u-box:before{content:"\FB01"}.mdi-alpha-u-box-outline:before{content:"\FC03"}.mdi-alpha-u-circle:before{content:"\FC04"}.mdi-alpha-u-circle-outline:before{content:"\FC05"}.mdi-alpha-v:before{content:"V"}.mdi-alpha-v-box:before{content:"\FB02"}.mdi-alpha-v-box-outline:before{content:"\FC06"}.mdi-alpha-v-circle:before{content:"\FC07"}.mdi-alpha-v-circle-outline:before{content:"\FC08"}.mdi-alpha-w:before{content:"W"}.mdi-alpha-w-box:before{content:"\FB03"}.mdi-alpha-w-box-outline:before{content:"\FC09"}.mdi-alpha-w-circle:before{content:"\FC0A"}.mdi-alpha-w-circle-outline:before{content:"\FC0B"}.mdi-alpha-x:before{content:"X"}.mdi-alpha-x-box:before{content:"\FB04"}.mdi-alpha-x-box-outline:before{content:"\FC0C"}.mdi-alpha-x-circle:before{content:"\FC0D"}.mdi-alpha-x-circle-outline:before{content:"\FC0E"}.mdi-alpha-y:before{content:"Y"}.mdi-alpha-y-box:before{content:"\FB05"}.mdi-alpha-y-box-outline:before{content:"\FC0F"}.mdi-alpha-y-circle:before{content:"\FC10"}.mdi-alpha-y-circle-outline:before{content:"\FC11"}.mdi-alpha-z:before{content:"Z"}.mdi-alpha-z-box:before{content:"\FB06"}.mdi-alpha-z-box-outline:before{content:"\FC12"}.mdi-alpha-z-circle:before{content:"\FC13"}.mdi-alpha-z-circle-outline:before{content:"\FC14"}.mdi-alphabetical:before{content:"\F02C"}.mdi-alphabetical-off:before{content:"\F002E"}.mdi-alphabetical-variant:before{content:"\F002F"}.mdi-alphabetical-variant-off:before{content:"\F0030"}.mdi-altimeter:before{content:"\F5D7"}.mdi-amazon:before{content:"\F02D"}.mdi-amazon-alexa:before{content:"\F8C5"}.mdi-amazon-drive:before{content:"\F02E"}.mdi-ambulance:before{content:"\F02F"}.mdi-ammunition:before{content:"\FCC4"}.mdi-ampersand:before{content:"\FA8C"}.mdi-amplifier:before{content:"\F030"}.mdi-amplifier-off:before{content:"\F01E0"}.mdi-anchor:before{content:"\F031"}.mdi-android:before{content:"\F032"}.mdi-android-auto:before{content:"\FA8D"}.mdi-android-debug-bridge:before{content:"\F033"}.mdi-android-head:before{content:"\F78F"}.mdi-android-messages:before{content:"\FD21"}.mdi-android-studio:before{content:"\F034"}.mdi-angle-acute:before{content:"\F936"}.mdi-angle-obtuse:before{content:"\F937"}.mdi-angle-right:before{content:"\F938"}.mdi-angular:before{content:"\F6B1"}.mdi-angularjs:before{content:"\F6BE"}.mdi-animation:before{content:"\F5D8"}.mdi-animation-outline:before{content:"\FA8E"}.mdi-animation-play:before{content:"\F939"}.mdi-animation-play-outline:before{content:"\FA8F"}.mdi-ansible:before{content:"\F00C5"}.mdi-antenna:before{content:"\F0144"}.mdi-anvil:before{content:"\F89A"}.mdi-apache-kafka:before{content:"\F0031"}.mdi-api:before{content:"\F00C6"}.mdi-api-off:before{content:"\F0282"}.mdi-apple:before{content:"\F035"}.mdi-apple-finder:before{content:"\F036"}.mdi-apple-icloud:before{content:"\F038"}.mdi-apple-ios:before{content:"\F037"}.mdi-apple-keyboard-caps:before{content:"\F632"}.mdi-apple-keyboard-command:before{content:"\F633"}.mdi-apple-keyboard-control:before{content:"\F634"}.mdi-apple-keyboard-option:before{content:"\F635"}.mdi-apple-keyboard-shift:before{content:"\F636"}.mdi-apple-safari:before{content:"\F039"}.mdi-application:before{content:"\F614"}.mdi-application-export:before{content:"\FD89"}.mdi-application-import:before{content:"\FD8A"}.mdi-approximately-equal:before{content:"\FFBE"}.mdi-approximately-equal-box:before{content:"\FFBF"}.mdi-apps:before{content:"\F03B"}.mdi-apps-box:before{content:"\FD22"}.mdi-arch:before{content:"\F8C6"}.mdi-archive:before{content:"\F03C"}.mdi-archive-arrow-down:before{content:"\F0284"}.mdi-archive-arrow-down-outline:before{content:"\F0285"}.mdi-archive-arrow-up:before{content:"\F0286"}.mdi-archive-arrow-up-outline:before{content:"\F0287"}.mdi-archive-outline:before{content:"\F0239"}.mdi-arm-flex:before{content:"\F008F"}.mdi-arm-flex-outline:before{content:"\F0090"}.mdi-arrange-bring-forward:before{content:"\F03D"}.mdi-arrange-bring-to-front:before{content:"\F03E"}.mdi-arrange-send-backward:before{content:"\F03F"}.mdi-arrange-send-to-back:before{content:"\F040"}.mdi-arrow-all:before{content:"\F041"}.mdi-arrow-bottom-left:before{content:"\F042"}.mdi-arrow-bottom-left-bold-outline:before{content:"\F9B6"}.mdi-arrow-bottom-left-thick:before{content:"\F9B7"}.mdi-arrow-bottom-right:before{content:"\F043"}.mdi-arrow-bottom-right-bold-outline:before{content:"\F9B8"}.mdi-arrow-bottom-right-thick:before{content:"\F9B9"}.mdi-arrow-collapse:before{content:"\F615"}.mdi-arrow-collapse-all:before{content:"\F044"}.mdi-arrow-collapse-down:before{content:"\F791"}.mdi-arrow-collapse-horizontal:before{content:"\F84B"}.mdi-arrow-collapse-left:before{content:"\F792"}.mdi-arrow-collapse-right:before{content:"\F793"}.mdi-arrow-collapse-up:before{content:"\F794"}.mdi-arrow-collapse-vertical:before{content:"\F84C"}.mdi-arrow-decision:before{content:"\F9BA"}.mdi-arrow-decision-auto:before{content:"\F9BB"}.mdi-arrow-decision-auto-outline:before{content:"\F9BC"}.mdi-arrow-decision-outline:before{content:"\F9BD"}.mdi-arrow-down:before{content:"\F045"}.mdi-arrow-down-bold:before{content:"\F72D"}.mdi-arrow-down-bold-box:before{content:"\F72E"}.mdi-arrow-down-bold-box-outline:before{content:"\F72F"}.mdi-arrow-down-bold-circle:before{content:"\F047"}.mdi-arrow-down-bold-circle-outline:before{content:"\F048"}.mdi-arrow-down-bold-hexagon-outline:before{content:"\F049"}.mdi-arrow-down-bold-outline:before{content:"\F9BE"}.mdi-arrow-down-box:before{content:"\F6BF"}.mdi-arrow-down-circle:before{content:"\FCB7"}.mdi-arrow-down-circle-outline:before{content:"\FCB8"}.mdi-arrow-down-drop-circle:before{content:"\F04A"}.mdi-arrow-down-drop-circle-outline:before{content:"\F04B"}.mdi-arrow-down-thick:before{content:"\F046"}.mdi-arrow-expand:before{content:"\F616"}.mdi-arrow-expand-all:before{content:"\F04C"}.mdi-arrow-expand-down:before{content:"\F795"}.mdi-arrow-expand-horizontal:before{content:"\F84D"}.mdi-arrow-expand-left:before{content:"\F796"}.mdi-arrow-expand-right:before{content:"\F797"}.mdi-arrow-expand-up:before{content:"\F798"}.mdi-arrow-expand-vertical:before{content:"\F84E"}.mdi-arrow-horizontal-lock:before{content:"\F0186"}.mdi-arrow-left:before{content:"\F04D"}.mdi-arrow-left-bold:before{content:"\F730"}.mdi-arrow-left-bold-box:before{content:"\F731"}.mdi-arrow-left-bold-box-outline:before{content:"\F732"}.mdi-arrow-left-bold-circle:before{content:"\F04F"}.mdi-arrow-left-bold-circle-outline:before{content:"\F050"}.mdi-arrow-left-bold-hexagon-outline:before{content:"\F051"}.mdi-arrow-left-bold-outline:before{content:"\F9BF"}.mdi-arrow-left-box:before{content:"\F6C0"}.mdi-arrow-left-circle:before{content:"\FCB9"}.mdi-arrow-left-circle-outline:before{content:"\FCBA"}.mdi-arrow-left-drop-circle:before{content:"\F052"}.mdi-arrow-left-drop-circle-outline:before{content:"\F053"}.mdi-arrow-left-right:before{content:"\FE90"}.mdi-arrow-left-right-bold:before{content:"\FE91"}.mdi-arrow-left-right-bold-outline:before{content:"\F9C0"}.mdi-arrow-left-thick:before{content:"\F04E"}.mdi-arrow-right:before{content:"\F054"}.mdi-arrow-right-bold:before{content:"\F733"}.mdi-arrow-right-bold-box:before{content:"\F734"}.mdi-arrow-right-bold-box-outline:before{content:"\F735"}.mdi-arrow-right-bold-circle:before{content:"\F056"}.mdi-arrow-right-bold-circle-outline:before{content:"\F057"}.mdi-arrow-right-bold-hexagon-outline:before{content:"\F058"}.mdi-arrow-right-bold-outline:before{content:"\F9C1"}.mdi-arrow-right-box:before{content:"\F6C1"}.mdi-arrow-right-circle:before{content:"\FCBB"}.mdi-arrow-right-circle-outline:before{content:"\FCBC"}.mdi-arrow-right-drop-circle:before{content:"\F059"}.mdi-arrow-right-drop-circle-outline:before{content:"\F05A"}.mdi-arrow-right-thick:before{content:"\F055"}.mdi-arrow-split-horizontal:before{content:"\F93A"}.mdi-arrow-split-vertical:before{content:"\F93B"}.mdi-arrow-top-left:before{content:"\F05B"}.mdi-arrow-top-left-bold-outline:before{content:"\F9C2"}.mdi-arrow-top-left-bottom-right:before{content:"\FE92"}.mdi-arrow-top-left-bottom-right-bold:before{content:"\FE93"}.mdi-arrow-top-left-thick:before{content:"\F9C3"}.mdi-arrow-top-right:before{content:"\F05C"}.mdi-arrow-top-right-bold-outline:before{content:"\F9C4"}.mdi-arrow-top-right-bottom-left:before{content:"\FE94"}.mdi-arrow-top-right-bottom-left-bold:before{content:"\FE95"}.mdi-arrow-top-right-thick:before{content:"\F9C5"}.mdi-arrow-up:before{content:"\F05D"}.mdi-arrow-up-bold:before{content:"\F736"}.mdi-arrow-up-bold-box:before{content:"\F737"}.mdi-arrow-up-bold-box-outline:before{content:"\F738"}.mdi-arrow-up-bold-circle:before{content:"\F05F"}.mdi-arrow-up-bold-circle-outline:before{content:"\F060"}.mdi-arrow-up-bold-hexagon-outline:before{content:"\F061"}.mdi-arrow-up-bold-outline:before{content:"\F9C6"}.mdi-arrow-up-box:before{content:"\F6C2"}.mdi-arrow-up-circle:before{content:"\FCBD"}.mdi-arrow-up-circle-outline:before{content:"\FCBE"}.mdi-arrow-up-down:before{content:"\FE96"}.mdi-arrow-up-down-bold:before{content:"\FE97"}.mdi-arrow-up-down-bold-outline:before{content:"\F9C7"}.mdi-arrow-up-drop-circle:before{content:"\F062"}.mdi-arrow-up-drop-circle-outline:before{content:"\F063"}.mdi-arrow-up-thick:before{content:"\F05E"}.mdi-arrow-vertical-lock:before{content:"\F0187"}.mdi-artist:before{content:"\F802"}.mdi-artist-outline:before{content:"\FCC5"}.mdi-artstation:before{content:"\FB37"}.mdi-aspect-ratio:before{content:"\FA23"}.mdi-assistant:before{content:"\F064"}.mdi-asterisk:before{content:"\F6C3"}.mdi-at:before{content:"\F065"}.mdi-atlassian:before{content:"\F803"}.mdi-atm:before{content:"\FD23"}.mdi-atom:before{content:"\F767"}.mdi-atom-variant:before{content:"\FE98"}.mdi-attachment:before{content:"\F066"}.mdi-audio-video:before{content:"\F93C"}.mdi-audio-video-off:before{content:"\F01E1"}.mdi-audiobook:before{content:"\F067"}.mdi-augmented-reality:before{content:"\F84F"}.mdi-auto-fix:before{content:"\F068"}.mdi-auto-upload:before{content:"\F069"}.mdi-autorenew:before{content:"\F06A"}.mdi-av-timer:before{content:"\F06B"}.mdi-aws:before{content:"\FDF2"}.mdi-axe:before{content:"\F8C7"}.mdi-axis:before{content:"\FD24"}.mdi-axis-arrow:before{content:"\FD25"}.mdi-axis-arrow-lock:before{content:"\FD26"}.mdi-axis-lock:before{content:"\FD27"}.mdi-axis-x-arrow:before{content:"\FD28"}.mdi-axis-x-arrow-lock:before{content:"\FD29"}.mdi-axis-x-rotate-clockwise:before{content:"\FD2A"}.mdi-axis-x-rotate-counterclockwise:before{content:"\FD2B"}.mdi-axis-x-y-arrow-lock:before{content:"\FD2C"}.mdi-axis-y-arrow:before{content:"\FD2D"}.mdi-axis-y-arrow-lock:before{content:"\FD2E"}.mdi-axis-y-rotate-clockwise:before{content:"\FD2F"}.mdi-axis-y-rotate-counterclockwise:before{content:"\FD30"}.mdi-axis-z-arrow:before{content:"\FD31"}.mdi-axis-z-arrow-lock:before{content:"\FD32"}.mdi-axis-z-rotate-clockwise:before{content:"\FD33"}.mdi-axis-z-rotate-counterclockwise:before{content:"\FD34"}.mdi-azure:before{content:"\F804"}.mdi-azure-devops:before{content:"\F0091"}.mdi-babel:before{content:"\FA24"}.mdi-baby:before{content:"\F06C"}.mdi-baby-bottle:before{content:"\FF56"}.mdi-baby-bottle-outline:before{content:"\FF57"}.mdi-baby-carriage:before{content:"\F68E"}.mdi-baby-carriage-off:before{content:"\FFC0"}.mdi-baby-face:before{content:"\FE99"}.mdi-baby-face-outline:before{content:"\FE9A"}.mdi-backburger:before{content:"\F06D"}.mdi-backspace:before{content:"\F06E"}.mdi-backspace-outline:before{content:"\FB38"}.mdi-backspace-reverse:before{content:"\FE9B"}.mdi-backspace-reverse-outline:before{content:"\FE9C"}.mdi-backup-restore:before{content:"\F06F"}.mdi-bacteria:before{content:"\FEF2"}.mdi-bacteria-outline:before{content:"\FEF3"}.mdi-badminton:before{content:"\F850"}.mdi-bag-carry-on:before{content:"\FF58"}.mdi-bag-carry-on-check:before{content:"\FD41"}.mdi-bag-carry-on-off:before{content:"\FF59"}.mdi-bag-checked:before{content:"\FF5A"}.mdi-bag-personal:before{content:"\FDF3"}.mdi-bag-personal-off:before{content:"\FDF4"}.mdi-bag-personal-off-outline:before{content:"\FDF5"}.mdi-bag-personal-outline:before{content:"\FDF6"}.mdi-baguette:before{content:"\FF5B"}.mdi-balloon:before{content:"\FA25"}.mdi-ballot:before{content:"\F9C8"}.mdi-ballot-outline:before{content:"\F9C9"}.mdi-ballot-recount:before{content:"\FC15"}.mdi-ballot-recount-outline:before{content:"\FC16"}.mdi-bandage:before{content:"\FD8B"}.mdi-bandcamp:before{content:"\F674"}.mdi-bank:before{content:"\F070"}.mdi-bank-minus:before{content:"\FD8C"}.mdi-bank-outline:before{content:"\FE9D"}.mdi-bank-plus:before{content:"\FD8D"}.mdi-bank-remove:before{content:"\FD8E"}.mdi-bank-transfer:before{content:"\FA26"}.mdi-bank-transfer-in:before{content:"\FA27"}.mdi-bank-transfer-out:before{content:"\FA28"}.mdi-barcode:before{content:"\F071"}.mdi-barcode-off:before{content:"\F0261"}.mdi-barcode-scan:before{content:"\F072"}.mdi-barley:before{content:"\F073"}.mdi-barley-off:before{content:"\FB39"}.mdi-barn:before{content:"\FB3A"}.mdi-barrel:before{content:"\F074"}.mdi-baseball:before{content:"\F851"}.mdi-baseball-bat:before{content:"\F852"}.mdi-basecamp:before{content:"\F075"}.mdi-bash:before{content:"\F01AE"}.mdi-basket:before{content:"\F076"}.mdi-basket-fill:before{content:"\F077"}.mdi-basket-outline:before{content:"\F01AC"}.mdi-basket-unfill:before{content:"\F078"}.mdi-basketball:before{content:"\F805"}.mdi-basketball-hoop:before{content:"\FC17"}.mdi-basketball-hoop-outline:before{content:"\FC18"}.mdi-bat:before{content:"\FB3B"}.mdi-battery:before{content:"\F079"}.mdi-battery-10:before{content:"\F07A"}.mdi-battery-10-bluetooth:before{content:"\F93D"}.mdi-battery-20:before{content:"\F07B"}.mdi-battery-20-bluetooth:before{content:"\F93E"}.mdi-battery-30:before{content:"\F07C"}.mdi-battery-30-bluetooth:before{content:"\F93F"}.mdi-battery-40:before{content:"\F07D"}.mdi-battery-40-bluetooth:before{content:"\F940"}.mdi-battery-50:before{content:"\F07E"}.mdi-battery-50-bluetooth:before{content:"\F941"}.mdi-battery-60:before{content:"\F07F"}.mdi-battery-60-bluetooth:before{content:"\F942"}.mdi-battery-70:before{content:"\F080"}.mdi-battery-70-bluetooth:before{content:"\F943"}.mdi-battery-80:before{content:"\F081"}.mdi-battery-80-bluetooth:before{content:"\F944"}.mdi-battery-90:before{content:"\F082"}.mdi-battery-90-bluetooth:before{content:"\F945"}.mdi-battery-alert:before{content:"\F083"}.mdi-battery-alert-bluetooth:before{content:"\F946"}.mdi-battery-alert-variant:before{content:"\F00F7"}.mdi-battery-alert-variant-outline:before{content:"\F00F8"}.mdi-battery-bluetooth:before{content:"\F947"}.mdi-battery-bluetooth-variant:before{content:"\F948"}.mdi-battery-charging:before{content:"\F084"}.mdi-battery-charging-10:before{content:"\F89B"}.mdi-battery-charging-100:before{content:"\F085"}.mdi-battery-charging-20:before{content:"\F086"}.mdi-battery-charging-30:before{content:"\F087"}.mdi-battery-charging-40:before{content:"\F088"}.mdi-battery-charging-50:before{content:"\F89C"}.mdi-battery-charging-60:before{content:"\F089"}.mdi-battery-charging-70:before{content:"\F89D"}.mdi-battery-charging-80:before{content:"\F08A"}.mdi-battery-charging-90:before{content:"\F08B"}.mdi-battery-charging-high:before{content:"\F02D1"}.mdi-battery-charging-low:before{content:"\F02CF"}.mdi-battery-charging-medium:before{content:"\F02D0"}.mdi-battery-charging-outline:before{content:"\F89E"}.mdi-battery-charging-wireless:before{content:"\F806"}.mdi-battery-charging-wireless-10:before{content:"\F807"}.mdi-battery-charging-wireless-20:before{content:"\F808"}.mdi-battery-charging-wireless-30:before{content:"\F809"}.mdi-battery-charging-wireless-40:before{content:"\F80A"}.mdi-battery-charging-wireless-50:before{content:"\F80B"}.mdi-battery-charging-wireless-60:before{content:"\F80C"}.mdi-battery-charging-wireless-70:before{content:"\F80D"}.mdi-battery-charging-wireless-80:before{content:"\F80E"}.mdi-battery-charging-wireless-90:before{content:"\F80F"}.mdi-battery-charging-wireless-alert:before{content:"\F810"}.mdi-battery-charging-wireless-outline:before{content:"\F811"}.mdi-battery-heart:before{content:"\F023A"}.mdi-battery-heart-outline:before{content:"\F023B"}.mdi-battery-heart-variant:before{content:"\F023C"}.mdi-battery-high:before{content:"\F02CE"}.mdi-battery-low:before{content:"\F02CC"}.mdi-battery-medium:before{content:"\F02CD"}.mdi-battery-minus:before{content:"\F08C"}.mdi-battery-negative:before{content:"\F08D"}.mdi-battery-off:before{content:"\F0288"}.mdi-battery-off-outline:before{content:"\F0289"}.mdi-battery-outline:before{content:"\F08E"}.mdi-battery-plus:before{content:"\F08F"}.mdi-battery-positive:before{content:"\F090"}.mdi-battery-unknown:before{content:"\F091"}.mdi-battery-unknown-bluetooth:before{content:"\F949"}.mdi-battlenet:before{content:"\FB3C"}.mdi-beach:before{content:"\F092"}.mdi-beaker:before{content:"\FCC6"}.mdi-beaker-alert:before{content:"\F0254"}.mdi-beaker-alert-outline:before{content:"\F0255"}.mdi-beaker-check:before{content:"\F0256"}.mdi-beaker-check-outline:before{content:"\F0257"}.mdi-beaker-minus:before{content:"\F0258"}.mdi-beaker-minus-outline:before{content:"\F0259"}.mdi-beaker-outline:before{content:"\F68F"}.mdi-beaker-plus:before{content:"\F025A"}.mdi-beaker-plus-outline:before{content:"\F025B"}.mdi-beaker-question:before{content:"\F025C"}.mdi-beaker-question-outline:before{content:"\F025D"}.mdi-beaker-remove:before{content:"\F025E"}.mdi-beaker-remove-outline:before{content:"\F025F"}.mdi-beats:before{content:"\F097"}.mdi-bed-double:before{content:"\F0092"}.mdi-bed-double-outline:before{content:"\F0093"}.mdi-bed-empty:before{content:"\F89F"}.mdi-bed-king:before{content:"\F0094"}.mdi-bed-king-outline:before{content:"\F0095"}.mdi-bed-queen:before{content:"\F0096"}.mdi-bed-queen-outline:before{content:"\F0097"}.mdi-bed-single:before{content:"\F0098"}.mdi-bed-single-outline:before{content:"\F0099"}.mdi-bee:before{content:"\FFC1"}.mdi-bee-flower:before{content:"\FFC2"}.mdi-beehive-outline:before{content:"\F00F9"}.mdi-beer:before{content:"\F098"}.mdi-behance:before{content:"\F099"}.mdi-bell:before{content:"\F09A"}.mdi-bell-alert:before{content:"\FD35"}.mdi-bell-alert-outline:before{content:"\FE9E"}.mdi-bell-check:before{content:"\F0210"}.mdi-bell-check-outline:before{content:"\F0211"}.mdi-bell-circle:before{content:"\FD36"}.mdi-bell-circle-outline:before{content:"\FD37"}.mdi-bell-off:before{content:"\F09B"}.mdi-bell-off-outline:before{content:"\FA90"}.mdi-bell-outline:before{content:"\F09C"}.mdi-bell-plus:before{content:"\F09D"}.mdi-bell-plus-outline:before{content:"\FA91"}.mdi-bell-ring:before{content:"\F09E"}.mdi-bell-ring-outline:before{content:"\F09F"}.mdi-bell-sleep:before{content:"\F0A0"}.mdi-bell-sleep-outline:before{content:"\FA92"}.mdi-beta:before{content:"\F0A1"}.mdi-betamax:before{content:"\F9CA"}.mdi-biathlon:before{content:"\FDF7"}.mdi-bible:before{content:"\F0A2"}.mdi-bicycle:before{content:"\F00C7"}.mdi-bicycle-basket:before{content:"\F0260"}.mdi-bike:before{content:"\F0A3"}.mdi-bike-fast:before{content:"\F014A"}.mdi-billboard:before{content:"\F0032"}.mdi-billiards:before{content:"\FB3D"}.mdi-billiards-rack:before{content:"\FB3E"}.mdi-bing:before{content:"\F0A4"}.mdi-binoculars:before{content:"\F0A5"}.mdi-bio:before{content:"\F0A6"}.mdi-biohazard:before{content:"\F0A7"}.mdi-bitbucket:before{content:"\F0A8"}.mdi-bitcoin:before{content:"\F812"}.mdi-black-mesa:before{content:"\F0A9"}.mdi-blackberry:before{content:"\F0AA"}.mdi-blender:before{content:"\FCC7"}.mdi-blender-software:before{content:"\F0AB"}.mdi-blinds:before{content:"\F0AC"}.mdi-blinds-open:before{content:"\F0033"}.mdi-block-helper:before{content:"\F0AD"}.mdi-blogger:before{content:"\F0AE"}.mdi-blood-bag:before{content:"\FCC8"}.mdi-bluetooth:before{content:"\F0AF"}.mdi-bluetooth-audio:before{content:"\F0B0"}.mdi-bluetooth-connect:before{content:"\F0B1"}.mdi-bluetooth-off:before{content:"\F0B2"}.mdi-bluetooth-settings:before{content:"\F0B3"}.mdi-bluetooth-transfer:before{content:"\F0B4"}.mdi-blur:before{content:"\F0B5"}.mdi-blur-linear:before{content:"\F0B6"}.mdi-blur-off:before{content:"\F0B7"}.mdi-blur-radial:before{content:"\F0B8"}.mdi-bolnisi-cross:before{content:"\FCC9"}.mdi-bolt:before{content:"\FD8F"}.mdi-bomb:before{content:"\F690"}.mdi-bomb-off:before{content:"\F6C4"}.mdi-bone:before{content:"\F0B9"}.mdi-book:before{content:"\F0BA"}.mdi-book-information-variant:before{content:"\F009A"}.mdi-book-lock:before{content:"\F799"}.mdi-book-lock-open:before{content:"\F79A"}.mdi-book-minus:before{content:"\F5D9"}.mdi-book-minus-multiple:before{content:"\FA93"}.mdi-book-multiple:before{content:"\F0BB"}.mdi-book-open:before{content:"\F0BD"}.mdi-book-open-outline:before{content:"\FB3F"}.mdi-book-open-page-variant:before{content:"\F5DA"}.mdi-book-open-variant:before{content:"\F0BE"}.mdi-book-outline:before{content:"\FB40"}.mdi-book-play:before{content:"\FE9F"}.mdi-book-play-outline:before{content:"\FEA0"}.mdi-book-plus:before{content:"\F5DB"}.mdi-book-plus-multiple:before{content:"\FA94"}.mdi-book-remove:before{content:"\FA96"}.mdi-book-remove-multiple:before{content:"\FA95"}.mdi-book-search:before{content:"\FEA1"}.mdi-book-search-outline:before{content:"\FEA2"}.mdi-book-variant:before{content:"\F0BF"}.mdi-book-variant-multiple:before{content:"\F0BC"}.mdi-bookmark:before{content:"\F0C0"}.mdi-bookmark-check:before{content:"\F0C1"}.mdi-bookmark-minus:before{content:"\F9CB"}.mdi-bookmark-minus-outline:before{content:"\F9CC"}.mdi-bookmark-multiple:before{content:"\FDF8"}.mdi-bookmark-multiple-outline:before{content:"\FDF9"}.mdi-bookmark-music:before{content:"\F0C2"}.mdi-bookmark-off:before{content:"\F9CD"}.mdi-bookmark-off-outline:before{content:"\F9CE"}.mdi-bookmark-outline:before{content:"\F0C3"}.mdi-bookmark-plus:before{content:"\F0C5"}.mdi-bookmark-plus-outline:before{content:"\F0C4"}.mdi-bookmark-remove:before{content:"\F0C6"}.mdi-bookshelf:before{content:"\F028A"}.mdi-boom-gate:before{content:"\FEA3"}.mdi-boom-gate-alert:before{content:"\FEA4"}.mdi-boom-gate-alert-outline:before{content:"\FEA5"}.mdi-boom-gate-down:before{content:"\FEA6"}.mdi-boom-gate-down-outline:before{content:"\FEA7"}.mdi-boom-gate-outline:before{content:"\FEA8"}.mdi-boom-gate-up:before{content:"\FEA9"}.mdi-boom-gate-up-outline:before{content:"\FEAA"}.mdi-boombox:before{content:"\F5DC"}.mdi-boomerang:before{content:"\F00FA"}.mdi-bootstrap:before{content:"\F6C5"}.mdi-border-all:before{content:"\F0C7"}.mdi-border-all-variant:before{content:"\F8A0"}.mdi-border-bottom:before{content:"\F0C8"}.mdi-border-bottom-variant:before{content:"\F8A1"}.mdi-border-color:before{content:"\F0C9"}.mdi-border-horizontal:before{content:"\F0CA"}.mdi-border-inside:before{content:"\F0CB"}.mdi-border-left:before{content:"\F0CC"}.mdi-border-left-variant:before{content:"\F8A2"}.mdi-border-none:before{content:"\F0CD"}.mdi-border-none-variant:before{content:"\F8A3"}.mdi-border-outside:before{content:"\F0CE"}.mdi-border-right:before{content:"\F0CF"}.mdi-border-right-variant:before{content:"\F8A4"}.mdi-border-style:before{content:"\F0D0"}.mdi-border-top:before{content:"\F0D1"}.mdi-border-top-variant:before{content:"\F8A5"}.mdi-border-vertical:before{content:"\F0D2"}.mdi-bottle-soda:before{content:"\F009B"}.mdi-bottle-soda-classic:before{content:"\F009C"}.mdi-bottle-soda-outline:before{content:"\F009D"}.mdi-bottle-tonic:before{content:"\F0159"}.mdi-bottle-tonic-outline:before{content:"\F015A"}.mdi-bottle-tonic-plus:before{content:"\F015B"}.mdi-bottle-tonic-plus-outline:before{content:"\F015C"}.mdi-bottle-tonic-skull:before{content:"\F015D"}.mdi-bottle-tonic-skull-outline:before{content:"\F015E"}.mdi-bottle-wine:before{content:"\F853"}.mdi-bow-tie:before{content:"\F677"}.mdi-bowl:before{content:"\F617"}.mdi-bowling:before{content:"\F0D3"}.mdi-box:before{content:"\F0D4"}.mdi-box-cutter:before{content:"\F0D5"}.mdi-box-shadow:before{content:"\F637"}.mdi-boxing-glove:before{content:"\FB41"}.mdi-braille:before{content:"\F9CF"}.mdi-brain:before{content:"\F9D0"}.mdi-bread-slice:before{content:"\FCCA"}.mdi-bread-slice-outline:before{content:"\FCCB"}.mdi-bridge:before{content:"\F618"}.mdi-briefcase:before{content:"\F0D6"}.mdi-briefcase-account:before{content:"\FCCC"}.mdi-briefcase-account-outline:before{content:"\FCCD"}.mdi-briefcase-check:before{content:"\F0D7"}.mdi-briefcase-clock:before{content:"\F00FB"}.mdi-briefcase-clock-outline:before{content:"\F00FC"}.mdi-briefcase-download:before{content:"\F0D8"}.mdi-briefcase-download-outline:before{content:"\FC19"}.mdi-briefcase-edit:before{content:"\FA97"}.mdi-briefcase-edit-outline:before{content:"\FC1A"}.mdi-briefcase-minus:before{content:"\FA29"}.mdi-briefcase-minus-outline:before{content:"\FC1B"}.mdi-briefcase-outline:before{content:"\F813"}.mdi-briefcase-plus:before{content:"\FA2A"}.mdi-briefcase-plus-outline:before{content:"\FC1C"}.mdi-briefcase-remove:before{content:"\FA2B"}.mdi-briefcase-remove-outline:before{content:"\FC1D"}.mdi-briefcase-search:before{content:"\FA2C"}.mdi-briefcase-search-outline:before{content:"\FC1E"}.mdi-briefcase-upload:before{content:"\F0D9"}.mdi-briefcase-upload-outline:before{content:"\FC1F"}.mdi-brightness-1:before{content:"\F0DA"}.mdi-brightness-2:before{content:"\F0DB"}.mdi-brightness-3:before{content:"\F0DC"}.mdi-brightness-4:before{content:"\F0DD"}.mdi-brightness-5:before{content:"\F0DE"}.mdi-brightness-6:before{content:"\F0DF"}.mdi-brightness-7:before{content:"\F0E0"}.mdi-brightness-auto:before{content:"\F0E1"}.mdi-brightness-percent:before{content:"\FCCE"}.mdi-broom:before{content:"\F0E2"}.mdi-brush:before{content:"\F0E3"}.mdi-buddhism:before{content:"\F94A"}.mdi-buffer:before{content:"\F619"}.mdi-bug:before{content:"\F0E4"}.mdi-bug-check:before{content:"\FA2D"}.mdi-bug-check-outline:before{content:"\FA2E"}.mdi-bug-outline:before{content:"\FA2F"}.mdi-bugle:before{content:"\FD90"}.mdi-bulldozer:before{content:"\FB07"}.mdi-bullet:before{content:"\FCCF"}.mdi-bulletin-board:before{content:"\F0E5"}.mdi-bullhorn:before{content:"\F0E6"}.mdi-bullhorn-outline:before{content:"\FB08"}.mdi-bullseye:before{content:"\F5DD"}.mdi-bullseye-arrow:before{content:"\F8C8"}.mdi-bus:before{content:"\F0E7"}.mdi-bus-alert:before{content:"\FA98"}.mdi-bus-articulated-end:before{content:"\F79B"}.mdi-bus-articulated-front:before{content:"\F79C"}.mdi-bus-clock:before{content:"\F8C9"}.mdi-bus-double-decker:before{content:"\F79D"}.mdi-bus-marker:before{content:"\F023D"}.mdi-bus-multiple:before{content:"\FF5C"}.mdi-bus-school:before{content:"\F79E"}.mdi-bus-side:before{content:"\F79F"}.mdi-bus-stop:before{content:"\F0034"}.mdi-bus-stop-covered:before{content:"\F0035"}.mdi-bus-stop-uncovered:before{content:"\F0036"}.mdi-cached:before{content:"\F0E8"}.mdi-cactus:before{content:"\FD91"}.mdi-cake:before{content:"\F0E9"}.mdi-cake-layered:before{content:"\F0EA"}.mdi-cake-variant:before{content:"\F0EB"}.mdi-calculator:before{content:"\F0EC"}.mdi-calculator-variant:before{content:"\FA99"}.mdi-calendar:before{content:"\F0ED"}.mdi-calendar-account:before{content:"\FEF4"}.mdi-calendar-account-outline:before{content:"\FEF5"}.mdi-calendar-alert:before{content:"\FA30"}.mdi-calendar-arrow-left:before{content:"\F015F"}.mdi-calendar-arrow-right:before{content:"\F0160"}.mdi-calendar-blank:before{content:"\F0EE"}.mdi-calendar-blank-multiple:before{content:"\F009E"}.mdi-calendar-blank-outline:before{content:"\FB42"}.mdi-calendar-check:before{content:"\F0EF"}.mdi-calendar-check-outline:before{content:"\FC20"}.mdi-calendar-clock:before{content:"\F0F0"}.mdi-calendar-edit:before{content:"\F8A6"}.mdi-calendar-export:before{content:"\FB09"}.mdi-calendar-heart:before{content:"\F9D1"}.mdi-calendar-import:before{content:"\FB0A"}.mdi-calendar-minus:before{content:"\FD38"}.mdi-calendar-month:before{content:"\FDFA"}.mdi-calendar-month-outline:before{content:"\FDFB"}.mdi-calendar-multiple:before{content:"\F0F1"}.mdi-calendar-multiple-check:before{content:"\F0F2"}.mdi-calendar-multiselect:before{content:"\FA31"}.mdi-calendar-outline:before{content:"\FB43"}.mdi-calendar-plus:before{content:"\F0F3"}.mdi-calendar-question:before{content:"\F691"}.mdi-calendar-range:before{content:"\F678"}.mdi-calendar-range-outline:before{content:"\FB44"}.mdi-calendar-remove:before{content:"\F0F4"}.mdi-calendar-remove-outline:before{content:"\FC21"}.mdi-calendar-repeat:before{content:"\FEAB"}.mdi-calendar-repeat-outline:before{content:"\FEAC"}.mdi-calendar-search:before{content:"\F94B"}.mdi-calendar-star:before{content:"\F9D2"}.mdi-calendar-text:before{content:"\F0F5"}.mdi-calendar-text-outline:before{content:"\FC22"}.mdi-calendar-today:before{content:"\F0F6"}.mdi-calendar-week:before{content:"\FA32"}.mdi-calendar-week-begin:before{content:"\FA33"}.mdi-calendar-weekend:before{content:"\FEF6"}.mdi-calendar-weekend-outline:before{content:"\FEF7"}.mdi-call-made:before{content:"\F0F7"}.mdi-call-merge:before{content:"\F0F8"}.mdi-call-missed:before{content:"\F0F9"}.mdi-call-received:before{content:"\F0FA"}.mdi-call-split:before{content:"\F0FB"}.mdi-camcorder:before{content:"\F0FC"}.mdi-camcorder-box:before{content:"\F0FD"}.mdi-camcorder-box-off:before{content:"\F0FE"}.mdi-camcorder-off:before{content:"\F0FF"}.mdi-camera:before{content:"\F100"}.mdi-camera-account:before{content:"\F8CA"}.mdi-camera-burst:before{content:"\F692"}.mdi-camera-control:before{content:"\FB45"}.mdi-camera-enhance:before{content:"\F101"}.mdi-camera-enhance-outline:before{content:"\FB46"}.mdi-camera-front:before{content:"\F102"}.mdi-camera-front-variant:before{content:"\F103"}.mdi-camera-gopro:before{content:"\F7A0"}.mdi-camera-image:before{content:"\F8CB"}.mdi-camera-iris:before{content:"\F104"}.mdi-camera-metering-center:before{content:"\F7A1"}.mdi-camera-metering-matrix:before{content:"\F7A2"}.mdi-camera-metering-partial:before{content:"\F7A3"}.mdi-camera-metering-spot:before{content:"\F7A4"}.mdi-camera-off:before{content:"\F5DF"}.mdi-camera-outline:before{content:"\FD39"}.mdi-camera-party-mode:before{content:"\F105"}.mdi-camera-plus:before{content:"\FEF8"}.mdi-camera-plus-outline:before{content:"\FEF9"}.mdi-camera-rear:before{content:"\F106"}.mdi-camera-rear-variant:before{content:"\F107"}.mdi-camera-retake:before{content:"\FDFC"}.mdi-camera-retake-outline:before{content:"\FDFD"}.mdi-camera-switch:before{content:"\F108"}.mdi-camera-timer:before{content:"\F109"}.mdi-camera-wireless:before{content:"\FD92"}.mdi-camera-wireless-outline:before{content:"\FD93"}.mdi-campfire:before{content:"\FEFA"}.mdi-cancel:before{content:"\F739"}.mdi-candle:before{content:"\F5E2"}.mdi-candycane:before{content:"\F10A"}.mdi-cannabis:before{content:"\F7A5"}.mdi-caps-lock:before{content:"\FA9A"}.mdi-car:before{content:"\F10B"}.mdi-car-2-plus:before{content:"\F0037"}.mdi-car-3-plus:before{content:"\F0038"}.mdi-car-back:before{content:"\FDFE"}.mdi-car-battery:before{content:"\F10C"}.mdi-car-brake-abs:before{content:"\FC23"}.mdi-car-brake-alert:before{content:"\FC24"}.mdi-car-brake-hold:before{content:"\FD3A"}.mdi-car-brake-parking:before{content:"\FD3B"}.mdi-car-brake-retarder:before{content:"\F0039"}.mdi-car-child-seat:before{content:"\FFC3"}.mdi-car-clutch:before{content:"\F003A"}.mdi-car-connected:before{content:"\F10D"}.mdi-car-convertible:before{content:"\F7A6"}.mdi-car-coolant-level:before{content:"\F003B"}.mdi-car-cruise-control:before{content:"\FD3C"}.mdi-car-defrost-front:before{content:"\FD3D"}.mdi-car-defrost-rear:before{content:"\FD3E"}.mdi-car-door:before{content:"\FB47"}.mdi-car-door-lock:before{content:"\F00C8"}.mdi-car-electric:before{content:"\FB48"}.mdi-car-esp:before{content:"\FC25"}.mdi-car-estate:before{content:"\F7A7"}.mdi-car-hatchback:before{content:"\F7A8"}.mdi-car-info:before{content:"\F01E9"}.mdi-car-key:before{content:"\FB49"}.mdi-car-light-dimmed:before{content:"\FC26"}.mdi-car-light-fog:before{content:"\FC27"}.mdi-car-light-high:before{content:"\FC28"}.mdi-car-limousine:before{content:"\F8CC"}.mdi-car-multiple:before{content:"\FB4A"}.mdi-car-off:before{content:"\FDFF"}.mdi-car-parking-lights:before{content:"\FD3F"}.mdi-car-pickup:before{content:"\F7A9"}.mdi-car-seat:before{content:"\FFC4"}.mdi-car-seat-cooler:before{content:"\FFC5"}.mdi-car-seat-heater:before{content:"\FFC6"}.mdi-car-shift-pattern:before{content:"\FF5D"}.mdi-car-side:before{content:"\F7AA"}.mdi-car-sports:before{content:"\F7AB"}.mdi-car-tire-alert:before{content:"\FC29"}.mdi-car-traction-control:before{content:"\FD40"}.mdi-car-turbocharger:before{content:"\F003C"}.mdi-car-wash:before{content:"\F10E"}.mdi-car-windshield:before{content:"\F003D"}.mdi-car-windshield-outline:before{content:"\F003E"}.mdi-caravan:before{content:"\F7AC"}.mdi-card:before{content:"\FB4B"}.mdi-card-bulleted:before{content:"\FB4C"}.mdi-card-bulleted-off:before{content:"\FB4D"}.mdi-card-bulleted-off-outline:before{content:"\FB4E"}.mdi-card-bulleted-outline:before{content:"\FB4F"}.mdi-card-bulleted-settings:before{content:"\FB50"}.mdi-card-bulleted-settings-outline:before{content:"\FB51"}.mdi-card-outline:before{content:"\FB52"}.mdi-card-plus:before{content:"\F022A"}.mdi-card-plus-outline:before{content:"\F022B"}.mdi-card-search:before{content:"\F009F"}.mdi-card-search-outline:before{content:"\F00A0"}.mdi-card-text:before{content:"\FB53"}.mdi-card-text-outline:before{content:"\FB54"}.mdi-cards:before{content:"\F638"}.mdi-cards-club:before{content:"\F8CD"}.mdi-cards-diamond:before{content:"\F8CE"}.mdi-cards-diamond-outline:before{content:"\F003F"}.mdi-cards-heart:before{content:"\F8CF"}.mdi-cards-outline:before{content:"\F639"}.mdi-cards-playing-outline:before{content:"\F63A"}.mdi-cards-spade:before{content:"\F8D0"}.mdi-cards-variant:before{content:"\F6C6"}.mdi-carrot:before{content:"\F10F"}.mdi-cart:before{content:"\F110"}.mdi-cart-arrow-down:before{content:"\FD42"}.mdi-cart-arrow-right:before{content:"\FC2A"}.mdi-cart-arrow-up:before{content:"\FD43"}.mdi-cart-minus:before{content:"\FD44"}.mdi-cart-off:before{content:"\F66B"}.mdi-cart-outline:before{content:"\F111"}.mdi-cart-plus:before{content:"\F112"}.mdi-cart-remove:before{content:"\FD45"}.mdi-case-sensitive-alt:before{content:"\F113"}.mdi-cash:before{content:"\F114"}.mdi-cash-100:before{content:"\F115"}.mdi-cash-marker:before{content:"\FD94"}.mdi-cash-minus:before{content:"\F028B"}.mdi-cash-multiple:before{content:"\F116"}.mdi-cash-plus:before{content:"\F028C"}.mdi-cash-refund:before{content:"\FA9B"}.mdi-cash-register:before{content:"\FCD0"}.mdi-cash-remove:before{content:"\F028D"}.mdi-cash-usd:before{content:"\F01A1"}.mdi-cash-usd-outline:before{content:"\F117"}.mdi-cassette:before{content:"\F9D3"}.mdi-cast:before{content:"\F118"}.mdi-cast-audio:before{content:"\F0040"}.mdi-cast-connected:before{content:"\F119"}.mdi-cast-education:before{content:"\FE6D"}.mdi-cast-off:before{content:"\F789"}.mdi-castle:before{content:"\F11A"}.mdi-cat:before{content:"\F11B"}.mdi-cctv:before{content:"\F7AD"}.mdi-ceiling-light:before{content:"\F768"}.mdi-cellphone:before{content:"\F11C"}.mdi-cellphone-android:before{content:"\F11D"}.mdi-cellphone-arrow-down:before{content:"\F9D4"}.mdi-cellphone-basic:before{content:"\F11E"}.mdi-cellphone-dock:before{content:"\F11F"}.mdi-cellphone-erase:before{content:"\F94C"}.mdi-cellphone-information:before{content:"\FF5E"}.mdi-cellphone-iphone:before{content:"\F120"}.mdi-cellphone-key:before{content:"\F94D"}.mdi-cellphone-link:before{content:"\F121"}.mdi-cellphone-link-off:before{content:"\F122"}.mdi-cellphone-lock:before{content:"\F94E"}.mdi-cellphone-message:before{content:"\F8D2"}.mdi-cellphone-message-off:before{content:"\F00FD"}.mdi-cellphone-nfc:before{content:"\FEAD"}.mdi-cellphone-off:before{content:"\F94F"}.mdi-cellphone-play:before{content:"\F0041"}.mdi-cellphone-screenshot:before{content:"\FA34"}.mdi-cellphone-settings:before{content:"\F123"}.mdi-cellphone-settings-variant:before{content:"\F950"}.mdi-cellphone-sound:before{content:"\F951"}.mdi-cellphone-text:before{content:"\F8D1"}.mdi-cellphone-wireless:before{content:"\F814"}.mdi-celtic-cross:before{content:"\FCD1"}.mdi-centos:before{content:"\F0145"}.mdi-certificate:before{content:"\F124"}.mdi-certificate-outline:before{content:"\F01B3"}.mdi-chair-rolling:before{content:"\FFBA"}.mdi-chair-school:before{content:"\F125"}.mdi-charity:before{content:"\FC2B"}.mdi-chart-arc:before{content:"\F126"}.mdi-chart-areaspline:before{content:"\F127"}.mdi-chart-areaspline-variant:before{content:"\FEAE"}.mdi-chart-bar:before{content:"\F128"}.mdi-chart-bar-stacked:before{content:"\F769"}.mdi-chart-bell-curve:before{content:"\FC2C"}.mdi-chart-bell-curve-cumulative:before{content:"\FFC7"}.mdi-chart-bubble:before{content:"\F5E3"}.mdi-chart-donut:before{content:"\F7AE"}.mdi-chart-donut-variant:before{content:"\F7AF"}.mdi-chart-gantt:before{content:"\F66C"}.mdi-chart-histogram:before{content:"\F129"}.mdi-chart-line:before{content:"\F12A"}.mdi-chart-line-stacked:before{content:"\F76A"}.mdi-chart-line-variant:before{content:"\F7B0"}.mdi-chart-multiline:before{content:"\F8D3"}.mdi-chart-multiple:before{content:"\F023E"}.mdi-chart-pie:before{content:"\F12B"}.mdi-chart-scatter-plot:before{content:"\FEAF"}.mdi-chart-scatter-plot-hexbin:before{content:"\F66D"}.mdi-chart-snakey:before{content:"\F020A"}.mdi-chart-snakey-variant:before{content:"\F020B"}.mdi-chart-timeline:before{content:"\F66E"}.mdi-chart-timeline-variant:before{content:"\FEB0"}.mdi-chart-tree:before{content:"\FEB1"}.mdi-chat:before{content:"\FB55"}.mdi-chat-alert:before{content:"\FB56"}.mdi-chat-outline:before{content:"\FEFB"}.mdi-chat-processing:before{content:"\FB57"}.mdi-check:before{content:"\F12C"}.mdi-check-all:before{content:"\F12D"}.mdi-check-bold:before{content:"\FE6E"}.mdi-check-box-multiple-outline:before{content:"\FC2D"}.mdi-check-box-outline:before{content:"\FC2E"}.mdi-check-circle:before{content:"\F5E0"}.mdi-check-circle-outline:before{content:"\F5E1"}.mdi-check-decagram:before{content:"\F790"}.mdi-check-network:before{content:"\FC2F"}.mdi-check-network-outline:before{content:"\FC30"}.mdi-check-outline:before{content:"\F854"}.mdi-check-underline:before{content:"\FE70"}.mdi-check-underline-circle:before{content:"\FE71"}.mdi-check-underline-circle-outline:before{content:"\FE72"}.mdi-checkbook:before{content:"\FA9C"}.mdi-checkbox-blank:before{content:"\F12E"}.mdi-checkbox-blank-circle:before{content:"\F12F"}.mdi-checkbox-blank-circle-outline:before{content:"\F130"}.mdi-checkbox-blank-outline:before{content:"\F131"}.mdi-checkbox-intermediate:before{content:"\F855"}.mdi-checkbox-marked:before{content:"\F132"}.mdi-checkbox-marked-circle:before{content:"\F133"}.mdi-checkbox-marked-circle-outline:before{content:"\F134"}.mdi-checkbox-marked-outline:before{content:"\F135"}.mdi-checkbox-multiple-blank:before{content:"\F136"}.mdi-checkbox-multiple-blank-circle:before{content:"\F63B"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"\F63C"}.mdi-checkbox-multiple-blank-outline:before{content:"\F137"}.mdi-checkbox-multiple-marked:before{content:"\F138"}.mdi-checkbox-multiple-marked-circle:before{content:"\F63D"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"\F63E"}.mdi-checkbox-multiple-marked-outline:before{content:"\F139"}.mdi-checkerboard:before{content:"\F13A"}.mdi-checkerboard-minus:before{content:"\F022D"}.mdi-checkerboard-plus:before{content:"\F022C"}.mdi-checkerboard-remove:before{content:"\F022E"}.mdi-cheese:before{content:"\F02E4"}.mdi-chef-hat:before{content:"\FB58"}.mdi-chemical-weapon:before{content:"\F13B"}.mdi-chess-bishop:before{content:"\F85B"}.mdi-chess-king:before{content:"\F856"}.mdi-chess-knight:before{content:"\F857"}.mdi-chess-pawn:before{content:"\F858"}.mdi-chess-queen:before{content:"\F859"}.mdi-chess-rook:before{content:"\F85A"}.mdi-chevron-double-down:before{content:"\F13C"}.mdi-chevron-double-left:before{content:"\F13D"}.mdi-chevron-double-right:before{content:"\F13E"}.mdi-chevron-double-up:before{content:"\F13F"}.mdi-chevron-down:before{content:"\F140"}.mdi-chevron-down-box:before{content:"\F9D5"}.mdi-chevron-down-box-outline:before{content:"\F9D6"}.mdi-chevron-down-circle:before{content:"\FB0B"}.mdi-chevron-down-circle-outline:before{content:"\FB0C"}.mdi-chevron-left:before{content:"\F141"}.mdi-chevron-left-box:before{content:"\F9D7"}.mdi-chevron-left-box-outline:before{content:"\F9D8"}.mdi-chevron-left-circle:before{content:"\FB0D"}.mdi-chevron-left-circle-outline:before{content:"\FB0E"}.mdi-chevron-right:before{content:"\F142"}.mdi-chevron-right-box:before{content:"\F9D9"}.mdi-chevron-right-box-outline:before{content:"\F9DA"}.mdi-chevron-right-circle:before{content:"\FB0F"}.mdi-chevron-right-circle-outline:before{content:"\FB10"}.mdi-chevron-triple-down:before{content:"\FD95"}.mdi-chevron-triple-left:before{content:"\FD96"}.mdi-chevron-triple-right:before{content:"\FD97"}.mdi-chevron-triple-up:before{content:"\FD98"}.mdi-chevron-up:before{content:"\F143"}.mdi-chevron-up-box:before{content:"\F9DB"}.mdi-chevron-up-box-outline:before{content:"\F9DC"}.mdi-chevron-up-circle:before{content:"\FB11"}.mdi-chevron-up-circle-outline:before{content:"\FB12"}.mdi-chili-hot:before{content:"\F7B1"}.mdi-chili-medium:before{content:"\F7B2"}.mdi-chili-mild:before{content:"\F7B3"}.mdi-chip:before{content:"\F61A"}.mdi-christianity:before{content:"\F952"}.mdi-christianity-outline:before{content:"\FCD2"}.mdi-church:before{content:"\F144"}.mdi-cigar:before{content:"\F01B4"}.mdi-circle:before{content:"\F764"}.mdi-circle-double:before{content:"\FEB2"}.mdi-circle-edit-outline:before{content:"\F8D4"}.mdi-circle-expand:before{content:"\FEB3"}.mdi-circle-medium:before{content:"\F9DD"}.mdi-circle-off-outline:before{content:"\F00FE"}.mdi-circle-outline:before{content:"\F765"}.mdi-circle-slice-1:before{content:"\FA9D"}.mdi-circle-slice-2:before{content:"\FA9E"}.mdi-circle-slice-3:before{content:"\FA9F"}.mdi-circle-slice-4:before{content:"\FAA0"}.mdi-circle-slice-5:before{content:"\FAA1"}.mdi-circle-slice-6:before{content:"\FAA2"}.mdi-circle-slice-7:before{content:"\FAA3"}.mdi-circle-slice-8:before{content:"\FAA4"}.mdi-circle-small:before{content:"\F9DE"}.mdi-circular-saw:before{content:"\FE73"}.mdi-cisco-webex:before{content:"\F145"}.mdi-city:before{content:"\F146"}.mdi-city-variant:before{content:"\FA35"}.mdi-city-variant-outline:before{content:"\FA36"}.mdi-clipboard:before{content:"\F147"}.mdi-clipboard-account:before{content:"\F148"}.mdi-clipboard-account-outline:before{content:"\FC31"}.mdi-clipboard-alert:before{content:"\F149"}.mdi-clipboard-alert-outline:before{content:"\FCD3"}.mdi-clipboard-arrow-down:before{content:"\F14A"}.mdi-clipboard-arrow-down-outline:before{content:"\FC32"}.mdi-clipboard-arrow-left:before{content:"\F14B"}.mdi-clipboard-arrow-left-outline:before{content:"\FCD4"}.mdi-clipboard-arrow-right:before{content:"\FCD5"}.mdi-clipboard-arrow-right-outline:before{content:"\FCD6"}.mdi-clipboard-arrow-up:before{content:"\FC33"}.mdi-clipboard-arrow-up-outline:before{content:"\FC34"}.mdi-clipboard-check:before{content:"\F14C"}.mdi-clipboard-check-multiple:before{content:"\F028E"}.mdi-clipboard-check-multiple-outline:before{content:"\F028F"}.mdi-clipboard-check-outline:before{content:"\F8A7"}.mdi-clipboard-file:before{content:"\F0290"}.mdi-clipboard-file-outline:before{content:"\F0291"}.mdi-clipboard-flow:before{content:"\F6C7"}.mdi-clipboard-flow-outline:before{content:"\F0142"}.mdi-clipboard-list:before{content:"\F00FF"}.mdi-clipboard-list-outline:before{content:"\F0100"}.mdi-clipboard-multiple:before{content:"\F0292"}.mdi-clipboard-multiple-outline:before{content:"\F0293"}.mdi-clipboard-outline:before{content:"\F14D"}.mdi-clipboard-play:before{content:"\FC35"}.mdi-clipboard-play-multiple:before{content:"\F0294"}.mdi-clipboard-play-multiple-outline:before{content:"\F0295"}.mdi-clipboard-play-outline:before{content:"\FC36"}.mdi-clipboard-plus:before{content:"\F750"}.mdi-clipboard-pulse:before{content:"\F85C"}.mdi-clipboard-pulse-outline:before{content:"\F85D"}.mdi-clipboard-text:before{content:"\F14E"}.mdi-clipboard-text-multiple:before{content:"\F0296"}.mdi-clipboard-text-multiple-outline:before{content:"\F0297"}.mdi-clipboard-text-outline:before{content:"\FA37"}.mdi-clipboard-text-play:before{content:"\FC37"}.mdi-clipboard-text-play-outline:before{content:"\FC38"}.mdi-clippy:before{content:"\F14F"}.mdi-clock:before{content:"\F953"}.mdi-clock-alert:before{content:"\F954"}.mdi-clock-alert-outline:before{content:"\F5CE"}.mdi-clock-check:before{content:"\FFC8"}.mdi-clock-check-outline:before{content:"\FFC9"}.mdi-clock-digital:before{content:"\FEB4"}.mdi-clock-end:before{content:"\F151"}.mdi-clock-fast:before{content:"\F152"}.mdi-clock-in:before{content:"\F153"}.mdi-clock-out:before{content:"\F154"}.mdi-clock-outline:before{content:"\F150"}.mdi-clock-start:before{content:"\F155"}.mdi-close:before{content:"\F156"}.mdi-close-box:before{content:"\F157"}.mdi-close-box-multiple:before{content:"\FC39"}.mdi-close-box-multiple-outline:before{content:"\FC3A"}.mdi-close-box-outline:before{content:"\F158"}.mdi-close-circle:before{content:"\F159"}.mdi-close-circle-outline:before{content:"\F15A"}.mdi-close-network:before{content:"\F15B"}.mdi-close-network-outline:before{content:"\FC3B"}.mdi-close-octagon:before{content:"\F15C"}.mdi-close-octagon-outline:before{content:"\F15D"}.mdi-close-outline:before{content:"\F6C8"}.mdi-closed-caption:before{content:"\F15E"}.mdi-closed-caption-outline:before{content:"\FD99"}.mdi-cloud:before{content:"\F15F"}.mdi-cloud-alert:before{content:"\F9DF"}.mdi-cloud-braces:before{content:"\F7B4"}.mdi-cloud-check:before{content:"\F160"}.mdi-cloud-circle:before{content:"\F161"}.mdi-cloud-download:before{content:"\F162"}.mdi-cloud-download-outline:before{content:"\FB59"}.mdi-cloud-lock:before{content:"\F021C"}.mdi-cloud-lock-outline:before{content:"\F021D"}.mdi-cloud-off-outline:before{content:"\F164"}.mdi-cloud-outline:before{content:"\F163"}.mdi-cloud-print:before{content:"\F165"}.mdi-cloud-print-outline:before{content:"\F166"}.mdi-cloud-question:before{content:"\FA38"}.mdi-cloud-search:before{content:"\F955"}.mdi-cloud-search-outline:before{content:"\F956"}.mdi-cloud-sync:before{content:"\F63F"}.mdi-cloud-tags:before{content:"\F7B5"}.mdi-cloud-upload:before{content:"\F167"}.mdi-cloud-upload-outline:before{content:"\FB5A"}.mdi-clover:before{content:"\F815"}.mdi-coach-lamp:before{content:"\F0042"}.mdi-coat-rack:before{content:"\F00C9"}.mdi-code-array:before{content:"\F168"}.mdi-code-braces:before{content:"\F169"}.mdi-code-braces-box:before{content:"\F0101"}.mdi-code-brackets:before{content:"\F16A"}.mdi-code-equal:before{content:"\F16B"}.mdi-code-greater-than:before{content:"\F16C"}.mdi-code-greater-than-or-equal:before{content:"\F16D"}.mdi-code-less-than:before{content:"\F16E"}.mdi-code-less-than-or-equal:before{content:"\F16F"}.mdi-code-not-equal:before{content:"\F170"}.mdi-code-not-equal-variant:before{content:"\F171"}.mdi-code-parentheses:before{content:"\F172"}.mdi-code-parentheses-box:before{content:"\F0102"}.mdi-code-string:before{content:"\F173"}.mdi-code-tags:before{content:"\F174"}.mdi-code-tags-check:before{content:"\F693"}.mdi-codepen:before{content:"\F175"}.mdi-coffee:before{content:"\F176"}.mdi-coffee-maker:before{content:"\F00CA"}.mdi-coffee-off:before{content:"\FFCA"}.mdi-coffee-off-outline:before{content:"\FFCB"}.mdi-coffee-outline:before{content:"\F6C9"}.mdi-coffee-to-go:before{content:"\F177"}.mdi-coffin:before{content:"\FB5B"}.mdi-cog-clockwise:before{content:"\F0208"}.mdi-cog-counterclockwise:before{content:"\F0209"}.mdi-cogs:before{content:"\F8D5"}.mdi-coin:before{content:"\F0196"}.mdi-coin-outline:before{content:"\F178"}.mdi-coins:before{content:"\F694"}.mdi-collage:before{content:"\F640"}.mdi-collapse-all:before{content:"\FAA5"}.mdi-collapse-all-outline:before{content:"\FAA6"}.mdi-color-helper:before{content:"\F179"}.mdi-comma:before{content:"\FE74"}.mdi-comma-box:before{content:"\FE75"}.mdi-comma-box-outline:before{content:"\FE76"}.mdi-comma-circle:before{content:"\FE77"}.mdi-comma-circle-outline:before{content:"\FE78"}.mdi-comment:before{content:"\F17A"}.mdi-comment-account:before{content:"\F17B"}.mdi-comment-account-outline:before{content:"\F17C"}.mdi-comment-alert:before{content:"\F17D"}.mdi-comment-alert-outline:before{content:"\F17E"}.mdi-comment-arrow-left:before{content:"\F9E0"}.mdi-comment-arrow-left-outline:before{content:"\F9E1"}.mdi-comment-arrow-right:before{content:"\F9E2"}.mdi-comment-arrow-right-outline:before{content:"\F9E3"}.mdi-comment-check:before{content:"\F17F"}.mdi-comment-check-outline:before{content:"\F180"}.mdi-comment-edit:before{content:"\F01EA"}.mdi-comment-eye:before{content:"\FA39"}.mdi-comment-eye-outline:before{content:"\FA3A"}.mdi-comment-multiple:before{content:"\F85E"}.mdi-comment-multiple-outline:before{content:"\F181"}.mdi-comment-outline:before{content:"\F182"}.mdi-comment-plus:before{content:"\F9E4"}.mdi-comment-plus-outline:before{content:"\F183"}.mdi-comment-processing:before{content:"\F184"}.mdi-comment-processing-outline:before{content:"\F185"}.mdi-comment-question:before{content:"\F816"}.mdi-comment-question-outline:before{content:"\F186"}.mdi-comment-quote:before{content:"\F0043"}.mdi-comment-quote-outline:before{content:"\F0044"}.mdi-comment-remove:before{content:"\F5DE"}.mdi-comment-remove-outline:before{content:"\F187"}.mdi-comment-search:before{content:"\FA3B"}.mdi-comment-search-outline:before{content:"\FA3C"}.mdi-comment-text:before{content:"\F188"}.mdi-comment-text-multiple:before{content:"\F85F"}.mdi-comment-text-multiple-outline:before{content:"\F860"}.mdi-comment-text-outline:before{content:"\F189"}.mdi-compare:before{content:"\F18A"}.mdi-compass:before{content:"\F18B"}.mdi-compass-off:before{content:"\FB5C"}.mdi-compass-off-outline:before{content:"\FB5D"}.mdi-compass-outline:before{content:"\F18C"}.mdi-concourse-ci:before{content:"\F00CB"}.mdi-console:before{content:"\F18D"}.mdi-console-line:before{content:"\F7B6"}.mdi-console-network:before{content:"\F8A8"}.mdi-console-network-outline:before{content:"\FC3C"}.mdi-consolidate:before{content:"\F0103"}.mdi-contact-mail:before{content:"\F18E"}.mdi-contact-mail-outline:before{content:"\FEB5"}.mdi-contact-phone:before{content:"\FEB6"}.mdi-contact-phone-outline:before{content:"\FEB7"}.mdi-contactless-payment:before{content:"\FD46"}.mdi-contacts:before{content:"\F6CA"}.mdi-contain:before{content:"\FA3D"}.mdi-contain-end:before{content:"\FA3E"}.mdi-contain-start:before{content:"\FA3F"}.mdi-content-copy:before{content:"\F18F"}.mdi-content-cut:before{content:"\F190"}.mdi-content-duplicate:before{content:"\F191"}.mdi-content-paste:before{content:"\F192"}.mdi-content-save:before{content:"\F193"}.mdi-content-save-alert:before{content:"\FF5F"}.mdi-content-save-alert-outline:before{content:"\FF60"}.mdi-content-save-all:before{content:"\F194"}.mdi-content-save-all-outline:before{content:"\FF61"}.mdi-content-save-edit:before{content:"\FCD7"}.mdi-content-save-edit-outline:before{content:"\FCD8"}.mdi-content-save-move:before{content:"\FE79"}.mdi-content-save-move-outline:before{content:"\FE7A"}.mdi-content-save-outline:before{content:"\F817"}.mdi-content-save-settings:before{content:"\F61B"}.mdi-content-save-settings-outline:before{content:"\FB13"}.mdi-contrast:before{content:"\F195"}.mdi-contrast-box:before{content:"\F196"}.mdi-contrast-circle:before{content:"\F197"}.mdi-controller-classic:before{content:"\FB5E"}.mdi-controller-classic-outline:before{content:"\FB5F"}.mdi-cookie:before{content:"\F198"}.mdi-coolant-temperature:before{content:"\F3C8"}.mdi-copyright:before{content:"\F5E6"}.mdi-cordova:before{content:"\F957"}.mdi-corn:before{content:"\F7B7"}.mdi-counter:before{content:"\F199"}.mdi-cow:before{content:"\F19A"}.mdi-cowboy:before{content:"\FEB8"}.mdi-cpu-32-bit:before{content:"\FEFC"}.mdi-cpu-64-bit:before{content:"\FEFD"}.mdi-crane:before{content:"\F861"}.mdi-creation:before{content:"\F1C9"}.mdi-creative-commons:before{content:"\FD47"}.mdi-credit-card:before{content:"\F0010"}.mdi-credit-card-clock:before{content:"\FEFE"}.mdi-credit-card-clock-outline:before{content:"\FFBC"}.mdi-credit-card-marker:before{content:"\F6A7"}.mdi-credit-card-marker-outline:before{content:"\FD9A"}.mdi-credit-card-minus:before{content:"\FFCC"}.mdi-credit-card-minus-outline:before{content:"\FFCD"}.mdi-credit-card-multiple:before{content:"\F0011"}.mdi-credit-card-multiple-outline:before{content:"\F19C"}.mdi-credit-card-off:before{content:"\F0012"}.mdi-credit-card-off-outline:before{content:"\F5E4"}.mdi-credit-card-outline:before{content:"\F19B"}.mdi-credit-card-plus:before{content:"\F0013"}.mdi-credit-card-plus-outline:before{content:"\F675"}.mdi-credit-card-refund:before{content:"\F0014"}.mdi-credit-card-refund-outline:before{content:"\FAA7"}.mdi-credit-card-remove:before{content:"\FFCE"}.mdi-credit-card-remove-outline:before{content:"\FFCF"}.mdi-credit-card-scan:before{content:"\F0015"}.mdi-credit-card-scan-outline:before{content:"\F19D"}.mdi-credit-card-settings:before{content:"\F0016"}.mdi-credit-card-settings-outline:before{content:"\F8D6"}.mdi-credit-card-wireless:before{content:"\F801"}.mdi-credit-card-wireless-outline:before{content:"\FD48"}.mdi-cricket:before{content:"\FD49"}.mdi-crop:before{content:"\F19E"}.mdi-crop-free:before{content:"\F19F"}.mdi-crop-landscape:before{content:"\F1A0"}.mdi-crop-portrait:before{content:"\F1A1"}.mdi-crop-rotate:before{content:"\F695"}.mdi-crop-square:before{content:"\F1A2"}.mdi-crosshairs:before{content:"\F1A3"}.mdi-crosshairs-gps:before{content:"\F1A4"}.mdi-crosshairs-off:before{content:"\FF62"}.mdi-crosshairs-question:before{content:"\F0161"}.mdi-crown:before{content:"\F1A5"}.mdi-crown-outline:before{content:"\F01FB"}.mdi-cryengine:before{content:"\F958"}.mdi-crystal-ball:before{content:"\FB14"}.mdi-cube:before{content:"\F1A6"}.mdi-cube-outline:before{content:"\F1A7"}.mdi-cube-scan:before{content:"\FB60"}.mdi-cube-send:before{content:"\F1A8"}.mdi-cube-unfolded:before{content:"\F1A9"}.mdi-cup:before{content:"\F1AA"}.mdi-cup-off:before{content:"\F5E5"}.mdi-cup-water:before{content:"\F1AB"}.mdi-cupboard:before{content:"\FF63"}.mdi-cupboard-outline:before{content:"\FF64"}.mdi-cupcake:before{content:"\F959"}.mdi-curling:before{content:"\F862"}.mdi-currency-bdt:before{content:"\F863"}.mdi-currency-brl:before{content:"\FB61"}.mdi-currency-btc:before{content:"\F1AC"}.mdi-currency-cny:before{content:"\F7B9"}.mdi-currency-eth:before{content:"\F7BA"}.mdi-currency-eur:before{content:"\F1AD"}.mdi-currency-gbp:before{content:"\F1AE"}.mdi-currency-ils:before{content:"\FC3D"}.mdi-currency-inr:before{content:"\F1AF"}.mdi-currency-jpy:before{content:"\F7BB"}.mdi-currency-krw:before{content:"\F7BC"}.mdi-currency-kzt:before{content:"\F864"}.mdi-currency-ngn:before{content:"\F1B0"}.mdi-currency-php:before{content:"\F9E5"}.mdi-currency-rial:before{content:"\FEB9"}.mdi-currency-rub:before{content:"\F1B1"}.mdi-currency-sign:before{content:"\F7BD"}.mdi-currency-try:before{content:"\F1B2"}.mdi-currency-twd:before{content:"\F7BE"}.mdi-currency-usd:before{content:"\F1B3"}.mdi-currency-usd-off:before{content:"\F679"}.mdi-current-ac:before{content:"\F95A"}.mdi-current-dc:before{content:"\F95B"}.mdi-cursor-default:before{content:"\F1B4"}.mdi-cursor-default-click:before{content:"\FCD9"}.mdi-cursor-default-click-outline:before{content:"\FCDA"}.mdi-cursor-default-gesture:before{content:"\F0152"}.mdi-cursor-default-gesture-outline:before{content:"\F0153"}.mdi-cursor-default-outline:before{content:"\F1B5"}.mdi-cursor-move:before{content:"\F1B6"}.mdi-cursor-pointer:before{content:"\F1B7"}.mdi-cursor-text:before{content:"\F5E7"}.mdi-database:before{content:"\F1B8"}.mdi-database-check:before{content:"\FAA8"}.mdi-database-edit:before{content:"\FB62"}.mdi-database-export:before{content:"\F95D"}.mdi-database-import:before{content:"\F95C"}.mdi-database-lock:before{content:"\FAA9"}.mdi-database-minus:before{content:"\F1B9"}.mdi-database-plus:before{content:"\F1BA"}.mdi-database-refresh:before{content:"\FCDB"}.mdi-database-remove:before{content:"\FCDC"}.mdi-database-search:before{content:"\F865"}.mdi-database-settings:before{content:"\FCDD"}.mdi-death-star:before{content:"\F8D7"}.mdi-death-star-variant:before{content:"\F8D8"}.mdi-deathly-hallows:before{content:"\FB63"}.mdi-debian:before{content:"\F8D9"}.mdi-debug-step-into:before{content:"\F1BB"}.mdi-debug-step-out:before{content:"\F1BC"}.mdi-debug-step-over:before{content:"\F1BD"}.mdi-decagram:before{content:"\F76B"}.mdi-decagram-outline:before{content:"\F76C"}.mdi-decimal:before{content:"\F00CC"}.mdi-decimal-comma:before{content:"\F00CD"}.mdi-decimal-comma-decrease:before{content:"\F00CE"}.mdi-decimal-comma-increase:before{content:"\F00CF"}.mdi-decimal-decrease:before{content:"\F1BE"}.mdi-decimal-increase:before{content:"\F1BF"}.mdi-delete:before{content:"\F1C0"}.mdi-delete-alert:before{content:"\F00D0"}.mdi-delete-alert-outline:before{content:"\F00D1"}.mdi-delete-circle:before{content:"\F682"}.mdi-delete-circle-outline:before{content:"\FB64"}.mdi-delete-empty:before{content:"\F6CB"}.mdi-delete-empty-outline:before{content:"\FEBA"}.mdi-delete-forever:before{content:"\F5E8"}.mdi-delete-forever-outline:before{content:"\FB65"}.mdi-delete-off:before{content:"\F00D2"}.mdi-delete-off-outline:before{content:"\F00D3"}.mdi-delete-outline:before{content:"\F9E6"}.mdi-delete-restore:before{content:"\F818"}.mdi-delete-sweep:before{content:"\F5E9"}.mdi-delete-sweep-outline:before{content:"\FC3E"}.mdi-delete-variant:before{content:"\F1C1"}.mdi-delta:before{content:"\F1C2"}.mdi-desk:before{content:"\F0264"}.mdi-desk-lamp:before{content:"\F95E"}.mdi-deskphone:before{content:"\F1C3"}.mdi-desktop-classic:before{content:"\F7BF"}.mdi-desktop-mac:before{content:"\F1C4"}.mdi-desktop-mac-dashboard:before{content:"\F9E7"}.mdi-desktop-tower:before{content:"\F1C5"}.mdi-desktop-tower-monitor:before{content:"\FAAA"}.mdi-details:before{content:"\F1C6"}.mdi-dev-to:before{content:"\FD4A"}.mdi-developer-board:before{content:"\F696"}.mdi-deviantart:before{content:"\F1C7"}.mdi-devices:before{content:"\FFD0"}.mdi-diabetes:before{content:"\F0151"}.mdi-dialpad:before{content:"\F61C"}.mdi-diameter:before{content:"\FC3F"}.mdi-diameter-outline:before{content:"\FC40"}.mdi-diameter-variant:before{content:"\FC41"}.mdi-diamond:before{content:"\FB66"}.mdi-diamond-outline:before{content:"\FB67"}.mdi-diamond-stone:before{content:"\F1C8"}.mdi-dice-1:before{content:"\F1CA"}.mdi-dice-1-outline:before{content:"\F0175"}.mdi-dice-2:before{content:"\F1CB"}.mdi-dice-2-outline:before{content:"\F0176"}.mdi-dice-3:before{content:"\F1CC"}.mdi-dice-3-outline:before{content:"\F0177"}.mdi-dice-4:before{content:"\F1CD"}.mdi-dice-4-outline:before{content:"\F0178"}.mdi-dice-5:before{content:"\F1CE"}.mdi-dice-5-outline:before{content:"\F0179"}.mdi-dice-6:before{content:"\F1CF"}.mdi-dice-6-outline:before{content:"\F017A"}.mdi-dice-d10:before{content:"\F017E"}.mdi-dice-d10-outline:before{content:"\F76E"}.mdi-dice-d12:before{content:"\F017F"}.mdi-dice-d12-outline:before{content:"\F866"}.mdi-dice-d20:before{content:"\F0180"}.mdi-dice-d20-outline:before{content:"\F5EA"}.mdi-dice-d4:before{content:"\F017B"}.mdi-dice-d4-outline:before{content:"\F5EB"}.mdi-dice-d6:before{content:"\F017C"}.mdi-dice-d6-outline:before{content:"\F5EC"}.mdi-dice-d8:before{content:"\F017D"}.mdi-dice-d8-outline:before{content:"\F5ED"}.mdi-dice-multiple:before{content:"\F76D"}.mdi-dice-multiple-outline:before{content:"\F0181"}.mdi-dictionary:before{content:"\F61D"}.mdi-digital-ocean:before{content:"\F0262"}.mdi-dip-switch:before{content:"\F7C0"}.mdi-directions:before{content:"\F1D0"}.mdi-directions-fork:before{content:"\F641"}.mdi-disc:before{content:"\F5EE"}.mdi-disc-alert:before{content:"\F1D1"}.mdi-disc-player:before{content:"\F95F"}.mdi-discord:before{content:"\F66F"}.mdi-dishwasher:before{content:"\FAAB"}.mdi-dishwasher-alert:before{content:"\F01E3"}.mdi-dishwasher-off:before{content:"\F01E4"}.mdi-disqus:before{content:"\F1D2"}.mdi-disqus-outline:before{content:"\F1D3"}.mdi-distribute-horizontal-center:before{content:"\F01F4"}.mdi-distribute-horizontal-left:before{content:"\F01F3"}.mdi-distribute-horizontal-right:before{content:"\F01F5"}.mdi-distribute-vertical-bottom:before{content:"\F01F6"}.mdi-distribute-vertical-center:before{content:"\F01F7"}.mdi-distribute-vertical-top:before{content:"\F01F8"}.mdi-diving-flippers:before{content:"\FD9B"}.mdi-diving-helmet:before{content:"\FD9C"}.mdi-diving-scuba:before{content:"\FD9D"}.mdi-diving-scuba-flag:before{content:"\FD9E"}.mdi-diving-scuba-tank:before{content:"\FD9F"}.mdi-diving-scuba-tank-multiple:before{content:"\FDA0"}.mdi-diving-snorkel:before{content:"\FDA1"}.mdi-division:before{content:"\F1D4"}.mdi-division-box:before{content:"\F1D5"}.mdi-dlna:before{content:"\FA40"}.mdi-dna:before{content:"\F683"}.mdi-dns:before{content:"\F1D6"}.mdi-dns-outline:before{content:"\FB68"}.mdi-do-not-disturb:before{content:"\F697"}.mdi-do-not-disturb-off:before{content:"\F698"}.mdi-dock-bottom:before{content:"\F00D4"}.mdi-dock-left:before{content:"\F00D5"}.mdi-dock-right:before{content:"\F00D6"}.mdi-dock-window:before{content:"\F00D7"}.mdi-docker:before{content:"\F867"}.mdi-doctor:before{content:"\FA41"}.mdi-dog:before{content:"\FA42"}.mdi-dog-service:before{content:"\FAAC"}.mdi-dog-side:before{content:"\FA43"}.mdi-dolby:before{content:"\F6B2"}.mdi-dolly:before{content:"\FEBB"}.mdi-domain:before{content:"\F1D7"}.mdi-domain-off:before{content:"\FD4B"}.mdi-domain-plus:before{content:"\F00D8"}.mdi-domain-remove:before{content:"\F00D9"}.mdi-domino-mask:before{content:"\F0045"}.mdi-donkey:before{content:"\F7C1"}.mdi-door:before{content:"\F819"}.mdi-door-closed:before{content:"\F81A"}.mdi-door-closed-lock:before{content:"\F00DA"}.mdi-door-open:before{content:"\F81B"}.mdi-doorbell-video:before{content:"\F868"}.mdi-dot-net:before{content:"\FAAD"}.mdi-dots-horizontal:before{content:"\F1D8"}.mdi-dots-horizontal-circle:before{content:"\F7C2"}.mdi-dots-horizontal-circle-outline:before{content:"\FB69"}.mdi-dots-vertical:before{content:"\F1D9"}.mdi-dots-vertical-circle:before{content:"\F7C3"}.mdi-dots-vertical-circle-outline:before{content:"\FB6A"}.mdi-douban:before{content:"\F699"}.mdi-download:before{content:"\F1DA"}.mdi-download-multiple:before{content:"\F9E8"}.mdi-download-network:before{content:"\F6F3"}.mdi-download-network-outline:before{content:"\FC42"}.mdi-download-off:before{content:"\F00DB"}.mdi-download-off-outline:before{content:"\F00DC"}.mdi-download-outline:before{content:"\FB6B"}.mdi-drag:before{content:"\F1DB"}.mdi-drag-horizontal:before{content:"\F1DC"}.mdi-drag-variant:before{content:"\FB6C"}.mdi-drag-vertical:before{content:"\F1DD"}.mdi-drama-masks:before{content:"\FCDE"}.mdi-draw:before{content:"\FF66"}.mdi-drawing:before{content:"\F1DE"}.mdi-drawing-box:before{content:"\F1DF"}.mdi-dresser:before{content:"\FF67"}.mdi-dresser-outline:before{content:"\FF68"}.mdi-dribbble:before{content:"\F1E0"}.mdi-dribbble-box:before{content:"\F1E1"}.mdi-drone:before{content:"\F1E2"}.mdi-dropbox:before{content:"\F1E3"}.mdi-drupal:before{content:"\F1E4"}.mdi-duck:before{content:"\F1E5"}.mdi-dumbbell:before{content:"\F1E6"}.mdi-dump-truck:before{content:"\FC43"}.mdi-ear-hearing:before{content:"\F7C4"}.mdi-ear-hearing-off:before{content:"\FA44"}.mdi-earth:before{content:"\F1E7"}.mdi-earth-box:before{content:"\F6CC"}.mdi-earth-box-off:before{content:"\F6CD"}.mdi-earth-off:before{content:"\F1E8"}.mdi-edge:before{content:"\F1E9"}.mdi-edge-legacy:before{content:"\F027B"}.mdi-egg:before{content:"\FAAE"}.mdi-egg-easter:before{content:"\FAAF"}.mdi-eight-track:before{content:"\F9E9"}.mdi-eject:before{content:"\F1EA"}.mdi-eject-outline:before{content:"\FB6D"}.mdi-electric-switch:before{content:"\FEBC"}.mdi-electric-switch-closed:before{content:"\F0104"}.mdi-electron-framework:before{content:"\F0046"}.mdi-elephant:before{content:"\F7C5"}.mdi-elevation-decline:before{content:"\F1EB"}.mdi-elevation-rise:before{content:"\F1EC"}.mdi-elevator:before{content:"\F1ED"}.mdi-ellipse:before{content:"\FEBD"}.mdi-ellipse-outline:before{content:"\FEBE"}.mdi-email:before{content:"\F1EE"}.mdi-email-alert:before{content:"\F6CE"}.mdi-email-box:before{content:"\FCDF"}.mdi-email-check:before{content:"\FAB0"}.mdi-email-check-outline:before{content:"\FAB1"}.mdi-email-edit:before{content:"\FF00"}.mdi-email-edit-outline:before{content:"\FF01"}.mdi-email-lock:before{content:"\F1F1"}.mdi-email-mark-as-unread:before{content:"\FB6E"}.mdi-email-minus:before{content:"\FF02"}.mdi-email-minus-outline:before{content:"\FF03"}.mdi-email-multiple:before{content:"\FF04"}.mdi-email-multiple-outline:before{content:"\FF05"}.mdi-email-newsletter:before{content:"\FFD1"}.mdi-email-open:before{content:"\F1EF"}.mdi-email-open-multiple:before{content:"\FF06"}.mdi-email-open-multiple-outline:before{content:"\FF07"}.mdi-email-open-outline:before{content:"\F5EF"}.mdi-email-outline:before{content:"\F1F0"}.mdi-email-plus:before{content:"\F9EA"}.mdi-email-plus-outline:before{content:"\F9EB"}.mdi-email-receive:before{content:"\F0105"}.mdi-email-receive-outline:before{content:"\F0106"}.mdi-email-search:before{content:"\F960"}.mdi-email-search-outline:before{content:"\F961"}.mdi-email-send:before{content:"\F0107"}.mdi-email-send-outline:before{content:"\F0108"}.mdi-email-variant:before{content:"\F5F0"}.mdi-ember:before{content:"\FB15"}.mdi-emby:before{content:"\F6B3"}.mdi-emoticon:before{content:"\FC44"}.mdi-emoticon-angry:before{content:"\FC45"}.mdi-emoticon-angry-outline:before{content:"\FC46"}.mdi-emoticon-confused:before{content:"\F0109"}.mdi-emoticon-confused-outline:before{content:"\F010A"}.mdi-emoticon-cool:before{content:"\FC47"}.mdi-emoticon-cool-outline:before{content:"\F1F3"}.mdi-emoticon-cry:before{content:"\FC48"}.mdi-emoticon-cry-outline:before{content:"\FC49"}.mdi-emoticon-dead:before{content:"\FC4A"}.mdi-emoticon-dead-outline:before{content:"\F69A"}.mdi-emoticon-devil:before{content:"\FC4B"}.mdi-emoticon-devil-outline:before{content:"\F1F4"}.mdi-emoticon-excited:before{content:"\FC4C"}.mdi-emoticon-excited-outline:before{content:"\F69B"}.mdi-emoticon-frown:before{content:"\FF69"}.mdi-emoticon-frown-outline:before{content:"\FF6A"}.mdi-emoticon-happy:before{content:"\FC4D"}.mdi-emoticon-happy-outline:before{content:"\F1F5"}.mdi-emoticon-kiss:before{content:"\FC4E"}.mdi-emoticon-kiss-outline:before{content:"\FC4F"}.mdi-emoticon-lol:before{content:"\F023F"}.mdi-emoticon-lol-outline:before{content:"\F0240"}.mdi-emoticon-neutral:before{content:"\FC50"}.mdi-emoticon-neutral-outline:before{content:"\F1F6"}.mdi-emoticon-outline:before{content:"\F1F2"}.mdi-emoticon-poop:before{content:"\F1F7"}.mdi-emoticon-poop-outline:before{content:"\FC51"}.mdi-emoticon-sad:before{content:"\FC52"}.mdi-emoticon-sad-outline:before{content:"\F1F8"}.mdi-emoticon-tongue:before{content:"\F1F9"}.mdi-emoticon-tongue-outline:before{content:"\FC53"}.mdi-emoticon-wink:before{content:"\FC54"}.mdi-emoticon-wink-outline:before{content:"\FC55"}.mdi-engine:before{content:"\F1FA"}.mdi-engine-off:before{content:"\FA45"}.mdi-engine-off-outline:before{content:"\FA46"}.mdi-engine-outline:before{content:"\F1FB"}.mdi-epsilon:before{content:"\F010B"}.mdi-equal:before{content:"\F1FC"}.mdi-equal-box:before{content:"\F1FD"}.mdi-equalizer:before{content:"\FEBF"}.mdi-equalizer-outline:before{content:"\FEC0"}.mdi-eraser:before{content:"\F1FE"}.mdi-eraser-variant:before{content:"\F642"}.mdi-escalator:before{content:"\F1FF"}.mdi-eslint:before{content:"\FC56"}.mdi-et:before{content:"\FAB2"}.mdi-ethereum:before{content:"\F869"}.mdi-ethernet:before{content:"\F200"}.mdi-ethernet-cable:before{content:"\F201"}.mdi-ethernet-cable-off:before{content:"\F202"}.mdi-etsy:before{content:"\F203"}.mdi-ev-station:before{content:"\F5F1"}.mdi-eventbrite:before{content:"\F7C6"}.mdi-evernote:before{content:"\F204"}.mdi-excavator:before{content:"\F0047"}.mdi-exclamation:before{content:"\F205"}.mdi-exclamation-thick:before{content:"\F0263"}.mdi-exit-run:before{content:"\FA47"}.mdi-exit-to-app:before{content:"\F206"}.mdi-expand-all:before{content:"\FAB3"}.mdi-expand-all-outline:before{content:"\FAB4"}.mdi-expansion-card:before{content:"\F8AD"}.mdi-expansion-card-variant:before{content:"\FFD2"}.mdi-exponent:before{content:"\F962"}.mdi-exponent-box:before{content:"\F963"}.mdi-export:before{content:"\F207"}.mdi-export-variant:before{content:"\FB6F"}.mdi-eye:before{content:"\F208"}.mdi-eye-check:before{content:"\FCE0"}.mdi-eye-check-outline:before{content:"\FCE1"}.mdi-eye-circle:before{content:"\FB70"}.mdi-eye-circle-outline:before{content:"\FB71"}.mdi-eye-minus:before{content:"\F0048"}.mdi-eye-minus-outline:before{content:"\F0049"}.mdi-eye-off:before{content:"\F209"}.mdi-eye-off-outline:before{content:"\F6D0"}.mdi-eye-outline:before{content:"\F6CF"}.mdi-eye-plus:before{content:"\F86A"}.mdi-eye-plus-outline:before{content:"\F86B"}.mdi-eye-settings:before{content:"\F86C"}.mdi-eye-settings-outline:before{content:"\F86D"}.mdi-eyedropper:before{content:"\F20A"}.mdi-eyedropper-variant:before{content:"\F20B"}.mdi-face:before{content:"\F643"}.mdi-face-agent:before{content:"\FD4C"}.mdi-face-outline:before{content:"\FB72"}.mdi-face-profile:before{content:"\F644"}.mdi-face-profile-woman:before{content:"\F00A1"}.mdi-face-recognition:before{content:"\FC57"}.mdi-face-woman:before{content:"\F00A2"}.mdi-face-woman-outline:before{content:"\F00A3"}.mdi-facebook:before{content:"\F20C"}.mdi-facebook-box:before{content:"\F20D"}.mdi-facebook-messenger:before{content:"\F20E"}.mdi-facebook-workplace:before{content:"\FB16"}.mdi-factory:before{content:"\F20F"}.mdi-fan:before{content:"\F210"}.mdi-fan-off:before{content:"\F81C"}.mdi-fast-forward:before{content:"\F211"}.mdi-fast-forward-10:before{content:"\FD4D"}.mdi-fast-forward-30:before{content:"\FCE2"}.mdi-fast-forward-5:before{content:"\F0223"}.mdi-fast-forward-outline:before{content:"\F6D1"}.mdi-fax:before{content:"\F212"}.mdi-feather:before{content:"\F6D2"}.mdi-feature-search:before{content:"\FA48"}.mdi-feature-search-outline:before{content:"\FA49"}.mdi-fedora:before{content:"\F8DA"}.mdi-ferris-wheel:before{content:"\FEC1"}.mdi-ferry:before{content:"\F213"}.mdi-file:before{content:"\F214"}.mdi-file-account:before{content:"\F73A"}.mdi-file-account-outline:before{content:"\F004A"}.mdi-file-alert:before{content:"\FA4A"}.mdi-file-alert-outline:before{content:"\FA4B"}.mdi-file-cabinet:before{content:"\FAB5"}.mdi-file-cad:before{content:"\FF08"}.mdi-file-cad-box:before{content:"\FF09"}.mdi-file-cancel:before{content:"\FDA2"}.mdi-file-cancel-outline:before{content:"\FDA3"}.mdi-file-certificate:before{content:"\F01B1"}.mdi-file-certificate-outline:before{content:"\F01B2"}.mdi-file-chart:before{content:"\F215"}.mdi-file-chart-outline:before{content:"\F004B"}.mdi-file-check:before{content:"\F216"}.mdi-file-check-outline:before{content:"\FE7B"}.mdi-file-cloud:before{content:"\F217"}.mdi-file-cloud-outline:before{content:"\F004C"}.mdi-file-code:before{content:"\F22E"}.mdi-file-code-outline:before{content:"\F004D"}.mdi-file-compare:before{content:"\F8A9"}.mdi-file-delimited:before{content:"\F218"}.mdi-file-delimited-outline:before{content:"\FEC2"}.mdi-file-document:before{content:"\F219"}.mdi-file-document-box:before{content:"\F21A"}.mdi-file-document-box-check:before{content:"\FEC3"}.mdi-file-document-box-check-outline:before{content:"\FEC4"}.mdi-file-document-box-minus:before{content:"\FEC5"}.mdi-file-document-box-minus-outline:before{content:"\FEC6"}.mdi-file-document-box-multiple:before{content:"\FAB6"}.mdi-file-document-box-multiple-outline:before{content:"\FAB7"}.mdi-file-document-box-outline:before{content:"\F9EC"}.mdi-file-document-box-plus:before{content:"\FEC7"}.mdi-file-document-box-plus-outline:before{content:"\FEC8"}.mdi-file-document-box-remove:before{content:"\FEC9"}.mdi-file-document-box-remove-outline:before{content:"\FECA"}.mdi-file-document-box-search:before{content:"\FECB"}.mdi-file-document-box-search-outline:before{content:"\FECC"}.mdi-file-document-edit:before{content:"\FDA4"}.mdi-file-document-edit-outline:before{content:"\FDA5"}.mdi-file-document-outline:before{content:"\F9ED"}.mdi-file-download:before{content:"\F964"}.mdi-file-download-outline:before{content:"\F965"}.mdi-file-edit:before{content:"\F0212"}.mdi-file-edit-outline:before{content:"\F0213"}.mdi-file-excel:before{content:"\F21B"}.mdi-file-excel-box:before{content:"\F21C"}.mdi-file-excel-box-outline:before{content:"\F004E"}.mdi-file-excel-outline:before{content:"\F004F"}.mdi-file-export:before{content:"\F21D"}.mdi-file-export-outline:before{content:"\F0050"}.mdi-file-eye:before{content:"\FDA6"}.mdi-file-eye-outline:before{content:"\FDA7"}.mdi-file-find:before{content:"\F21E"}.mdi-file-find-outline:before{content:"\FB73"}.mdi-file-hidden:before{content:"\F613"}.mdi-file-image:before{content:"\F21F"}.mdi-file-image-outline:before{content:"\FECD"}.mdi-file-import:before{content:"\F220"}.mdi-file-import-outline:before{content:"\F0051"}.mdi-file-key:before{content:"\F01AF"}.mdi-file-key-outline:before{content:"\F01B0"}.mdi-file-link:before{content:"\F01A2"}.mdi-file-link-outline:before{content:"\F01A3"}.mdi-file-lock:before{content:"\F221"}.mdi-file-lock-outline:before{content:"\F0052"}.mdi-file-move:before{content:"\FAB8"}.mdi-file-move-outline:before{content:"\F0053"}.mdi-file-multiple:before{content:"\F222"}.mdi-file-multiple-outline:before{content:"\F0054"}.mdi-file-music:before{content:"\F223"}.mdi-file-music-outline:before{content:"\FE7C"}.mdi-file-outline:before{content:"\F224"}.mdi-file-pdf:before{content:"\F225"}.mdi-file-pdf-box:before{content:"\F226"}.mdi-file-pdf-box-outline:before{content:"\FFD3"}.mdi-file-pdf-outline:before{content:"\FE7D"}.mdi-file-percent:before{content:"\F81D"}.mdi-file-percent-outline:before{content:"\F0055"}.mdi-file-phone:before{content:"\F01A4"}.mdi-file-phone-outline:before{content:"\F01A5"}.mdi-file-plus:before{content:"\F751"}.mdi-file-plus-outline:before{content:"\FF0A"}.mdi-file-powerpoint:before{content:"\F227"}.mdi-file-powerpoint-box:before{content:"\F228"}.mdi-file-powerpoint-box-outline:before{content:"\F0056"}.mdi-file-powerpoint-outline:before{content:"\F0057"}.mdi-file-presentation-box:before{content:"\F229"}.mdi-file-question:before{content:"\F86E"}.mdi-file-question-outline:before{content:"\F0058"}.mdi-file-remove:before{content:"\FB74"}.mdi-file-remove-outline:before{content:"\F0059"}.mdi-file-replace:before{content:"\FB17"}.mdi-file-replace-outline:before{content:"\FB18"}.mdi-file-restore:before{content:"\F670"}.mdi-file-restore-outline:before{content:"\F005A"}.mdi-file-search:before{content:"\FC58"}.mdi-file-search-outline:before{content:"\FC59"}.mdi-file-send:before{content:"\F22A"}.mdi-file-send-outline:before{content:"\F005B"}.mdi-file-settings:before{content:"\F00A4"}.mdi-file-settings-outline:before{content:"\F00A5"}.mdi-file-settings-variant:before{content:"\F00A6"}.mdi-file-settings-variant-outline:before{content:"\F00A7"}.mdi-file-star:before{content:"\F005C"}.mdi-file-star-outline:before{content:"\F005D"}.mdi-file-swap:before{content:"\FFD4"}.mdi-file-swap-outline:before{content:"\FFD5"}.mdi-file-sync:before{content:"\F0241"}.mdi-file-sync-outline:before{content:"\F0242"}.mdi-file-table:before{content:"\FC5A"}.mdi-file-table-box:before{content:"\F010C"}.mdi-file-table-box-multiple:before{content:"\F010D"}.mdi-file-table-box-multiple-outline:before{content:"\F010E"}.mdi-file-table-box-outline:before{content:"\F010F"}.mdi-file-table-outline:before{content:"\FC5B"}.mdi-file-tree:before{content:"\F645"}.mdi-file-undo:before{content:"\F8DB"}.mdi-file-undo-outline:before{content:"\F005E"}.mdi-file-upload:before{content:"\FA4C"}.mdi-file-upload-outline:before{content:"\FA4D"}.mdi-file-video:before{content:"\F22B"}.mdi-file-video-outline:before{content:"\FE10"}.mdi-file-word:before{content:"\F22C"}.mdi-file-word-box:before{content:"\F22D"}.mdi-file-word-box-outline:before{content:"\F005F"}.mdi-file-word-outline:before{content:"\F0060"}.mdi-film:before{content:"\F22F"}.mdi-filmstrip:before{content:"\F230"}.mdi-filmstrip-off:before{content:"\F231"}.mdi-filter:before{content:"\F232"}.mdi-filter-menu:before{content:"\F0110"}.mdi-filter-menu-outline:before{content:"\F0111"}.mdi-filter-minus:before{content:"\FF0B"}.mdi-filter-minus-outline:before{content:"\FF0C"}.mdi-filter-outline:before{content:"\F233"}.mdi-filter-plus:before{content:"\FF0D"}.mdi-filter-plus-outline:before{content:"\FF0E"}.mdi-filter-remove:before{content:"\F234"}.mdi-filter-remove-outline:before{content:"\F235"}.mdi-filter-variant:before{content:"\F236"}.mdi-filter-variant-minus:before{content:"\F013D"}.mdi-filter-variant-plus:before{content:"\F013E"}.mdi-filter-variant-remove:before{content:"\F0061"}.mdi-finance:before{content:"\F81E"}.mdi-find-replace:before{content:"\F6D3"}.mdi-fingerprint:before{content:"\F237"}.mdi-fingerprint-off:before{content:"\FECE"}.mdi-fire:before{content:"\F238"}.mdi-fire-extinguisher:before{content:"\FF0F"}.mdi-fire-hydrant:before{content:"\F0162"}.mdi-fire-hydrant-alert:before{content:"\F0163"}.mdi-fire-hydrant-off:before{content:"\F0164"}.mdi-fire-truck:before{content:"\F8AA"}.mdi-firebase:before{content:"\F966"}.mdi-firefox:before{content:"\F239"}.mdi-fireplace:before{content:"\FE11"}.mdi-fireplace-off:before{content:"\FE12"}.mdi-firework:before{content:"\FE13"}.mdi-fish:before{content:"\F23A"}.mdi-fishbowl:before{content:"\FF10"}.mdi-fishbowl-outline:before{content:"\FF11"}.mdi-fit-to-page:before{content:"\FF12"}.mdi-fit-to-page-outline:before{content:"\FF13"}.mdi-flag:before{content:"\F23B"}.mdi-flag-checkered:before{content:"\F23C"}.mdi-flag-minus:before{content:"\FB75"}.mdi-flag-minus-outline:before{content:"\F00DD"}.mdi-flag-outline:before{content:"\F23D"}.mdi-flag-plus:before{content:"\FB76"}.mdi-flag-plus-outline:before{content:"\F00DE"}.mdi-flag-remove:before{content:"\FB77"}.mdi-flag-remove-outline:before{content:"\F00DF"}.mdi-flag-triangle:before{content:"\F23F"}.mdi-flag-variant:before{content:"\F240"}.mdi-flag-variant-outline:before{content:"\F23E"}.mdi-flare:before{content:"\FD4E"}.mdi-flash:before{content:"\F241"}.mdi-flash-alert:before{content:"\FF14"}.mdi-flash-alert-outline:before{content:"\FF15"}.mdi-flash-auto:before{content:"\F242"}.mdi-flash-circle:before{content:"\F81F"}.mdi-flash-off:before{content:"\F243"}.mdi-flash-outline:before{content:"\F6D4"}.mdi-flash-red-eye:before{content:"\F67A"}.mdi-flashlight:before{content:"\F244"}.mdi-flashlight-off:before{content:"\F245"}.mdi-flask:before{content:"\F093"}.mdi-flask-empty:before{content:"\F094"}.mdi-flask-empty-minus:before{content:"\F0265"}.mdi-flask-empty-minus-outline:before{content:"\F0266"}.mdi-flask-empty-outline:before{content:"\F095"}.mdi-flask-empty-plus:before{content:"\F0267"}.mdi-flask-empty-plus-outline:before{content:"\F0268"}.mdi-flask-empty-remove:before{content:"\F0269"}.mdi-flask-empty-remove-outline:before{content:"\F026A"}.mdi-flask-minus:before{content:"\F026B"}.mdi-flask-minus-outline:before{content:"\F026C"}.mdi-flask-outline:before{content:"\F096"}.mdi-flask-plus:before{content:"\F026D"}.mdi-flask-plus-outline:before{content:"\F026E"}.mdi-flask-remove:before{content:"\F026F"}.mdi-flask-remove-outline:before{content:"\F0270"}.mdi-flask-round-bottom:before{content:"\F0276"}.mdi-flask-round-bottom-empty:before{content:"\F0277"}.mdi-flask-round-bottom-empty-outline:before{content:"\F0278"}.mdi-flask-round-bottom-outline:before{content:"\F0279"}.mdi-flattr:before{content:"\F246"}.mdi-flickr:before{content:"\FCE3"}.mdi-flip-horizontal:before{content:"\F0112"}.mdi-flip-to-back:before{content:"\F247"}.mdi-flip-to-front:before{content:"\F248"}.mdi-flip-vertical:before{content:"\F0113"}.mdi-floor-lamp:before{content:"\F8DC"}.mdi-floor-lamp-dual:before{content:"\F0062"}.mdi-floor-lamp-variant:before{content:"\F0063"}.mdi-floor-plan:before{content:"\F820"}.mdi-floppy:before{content:"\F249"}.mdi-floppy-variant:before{content:"\F9EE"}.mdi-flower:before{content:"\F24A"}.mdi-flower-outline:before{content:"\F9EF"}.mdi-flower-poppy:before{content:"\FCE4"}.mdi-flower-tulip:before{content:"\F9F0"}.mdi-flower-tulip-outline:before{content:"\F9F1"}.mdi-focus-auto:before{content:"\FF6B"}.mdi-focus-field:before{content:"\FF6C"}.mdi-focus-field-horizontal:before{content:"\FF6D"}.mdi-focus-field-vertical:before{content:"\FF6E"}.mdi-folder:before{content:"\F24B"}.mdi-folder-account:before{content:"\F24C"}.mdi-folder-account-outline:before{content:"\FB78"}.mdi-folder-alert:before{content:"\FDA8"}.mdi-folder-alert-outline:before{content:"\FDA9"}.mdi-folder-clock:before{content:"\FAB9"}.mdi-folder-clock-outline:before{content:"\FABA"}.mdi-folder-download:before{content:"\F24D"}.mdi-folder-download-outline:before{content:"\F0114"}.mdi-folder-edit:before{content:"\F8DD"}.mdi-folder-edit-outline:before{content:"\FDAA"}.mdi-folder-google-drive:before{content:"\F24E"}.mdi-folder-heart:before{content:"\F0115"}.mdi-folder-heart-outline:before{content:"\F0116"}.mdi-folder-home:before{content:"\F00E0"}.mdi-folder-home-outline:before{content:"\F00E1"}.mdi-folder-image:before{content:"\F24F"}.mdi-folder-information:before{content:"\F00E2"}.mdi-folder-information-outline:before{content:"\F00E3"}.mdi-folder-key:before{content:"\F8AB"}.mdi-folder-key-network:before{content:"\F8AC"}.mdi-folder-key-network-outline:before{content:"\FC5C"}.mdi-folder-key-outline:before{content:"\F0117"}.mdi-folder-lock:before{content:"\F250"}.mdi-folder-lock-open:before{content:"\F251"}.mdi-folder-marker:before{content:"\F0298"}.mdi-folder-marker-outline:before{content:"\F0299"}.mdi-folder-move:before{content:"\F252"}.mdi-folder-move-outline:before{content:"\F0271"}.mdi-folder-multiple:before{content:"\F253"}.mdi-folder-multiple-image:before{content:"\F254"}.mdi-folder-multiple-outline:before{content:"\F255"}.mdi-folder-network:before{content:"\F86F"}.mdi-folder-network-outline:before{content:"\FC5D"}.mdi-folder-open:before{content:"\F76F"}.mdi-folder-open-outline:before{content:"\FDAB"}.mdi-folder-outline:before{content:"\F256"}.mdi-folder-plus:before{content:"\F257"}.mdi-folder-plus-outline:before{content:"\FB79"}.mdi-folder-pound:before{content:"\FCE5"}.mdi-folder-pound-outline:before{content:"\FCE6"}.mdi-folder-remove:before{content:"\F258"}.mdi-folder-remove-outline:before{content:"\FB7A"}.mdi-folder-search:before{content:"\F967"}.mdi-folder-search-outline:before{content:"\F968"}.mdi-folder-settings:before{content:"\F00A8"}.mdi-folder-settings-outline:before{content:"\F00A9"}.mdi-folder-settings-variant:before{content:"\F00AA"}.mdi-folder-settings-variant-outline:before{content:"\F00AB"}.mdi-folder-star:before{content:"\F69C"}.mdi-folder-star-outline:before{content:"\FB7B"}.mdi-folder-swap:before{content:"\FFD6"}.mdi-folder-swap-outline:before{content:"\FFD7"}.mdi-folder-sync:before{content:"\FCE7"}.mdi-folder-sync-outline:before{content:"\FCE8"}.mdi-folder-text:before{content:"\FC5E"}.mdi-folder-text-outline:before{content:"\FC5F"}.mdi-folder-upload:before{content:"\F259"}.mdi-folder-upload-outline:before{content:"\F0118"}.mdi-folder-zip:before{content:"\F6EA"}.mdi-folder-zip-outline:before{content:"\F7B8"}.mdi-font-awesome:before{content:"\F03A"}.mdi-food:before{content:"\F25A"}.mdi-food-apple:before{content:"\F25B"}.mdi-food-apple-outline:before{content:"\FC60"}.mdi-food-croissant:before{content:"\F7C7"}.mdi-food-fork-drink:before{content:"\F5F2"}.mdi-food-off:before{content:"\F5F3"}.mdi-food-variant:before{content:"\F25C"}.mdi-foot-print:before{content:"\FF6F"}.mdi-football:before{content:"\F25D"}.mdi-football-australian:before{content:"\F25E"}.mdi-football-helmet:before{content:"\F25F"}.mdi-forklift:before{content:"\F7C8"}.mdi-format-align-bottom:before{content:"\F752"}.mdi-format-align-center:before{content:"\F260"}.mdi-format-align-justify:before{content:"\F261"}.mdi-format-align-left:before{content:"\F262"}.mdi-format-align-middle:before{content:"\F753"}.mdi-format-align-right:before{content:"\F263"}.mdi-format-align-top:before{content:"\F754"}.mdi-format-annotation-minus:before{content:"\FABB"}.mdi-format-annotation-plus:before{content:"\F646"}.mdi-format-bold:before{content:"\F264"}.mdi-format-clear:before{content:"\F265"}.mdi-format-color-fill:before{content:"\F266"}.mdi-format-color-highlight:before{content:"\FE14"}.mdi-format-color-text:before{content:"\F69D"}.mdi-format-columns:before{content:"\F8DE"}.mdi-format-float-center:before{content:"\F267"}.mdi-format-float-left:before{content:"\F268"}.mdi-format-float-none:before{content:"\F269"}.mdi-format-float-right:before{content:"\F26A"}.mdi-format-font:before{content:"\F6D5"}.mdi-format-font-size-decrease:before{content:"\F9F2"}.mdi-format-font-size-increase:before{content:"\F9F3"}.mdi-format-header-1:before{content:"\F26B"}.mdi-format-header-2:before{content:"\F26C"}.mdi-format-header-3:before{content:"\F26D"}.mdi-format-header-4:before{content:"\F26E"}.mdi-format-header-5:before{content:"\F26F"}.mdi-format-header-6:before{content:"\F270"}.mdi-format-header-decrease:before{content:"\F271"}.mdi-format-header-equal:before{content:"\F272"}.mdi-format-header-increase:before{content:"\F273"}.mdi-format-header-pound:before{content:"\F274"}.mdi-format-horizontal-align-center:before{content:"\F61E"}.mdi-format-horizontal-align-left:before{content:"\F61F"}.mdi-format-horizontal-align-right:before{content:"\F620"}.mdi-format-indent-decrease:before{content:"\F275"}.mdi-format-indent-increase:before{content:"\F276"}.mdi-format-italic:before{content:"\F277"}.mdi-format-letter-case:before{content:"\FB19"}.mdi-format-letter-case-lower:before{content:"\FB1A"}.mdi-format-letter-case-upper:before{content:"\FB1B"}.mdi-format-letter-ends-with:before{content:"\FFD8"}.mdi-format-letter-matches:before{content:"\FFD9"}.mdi-format-letter-starts-with:before{content:"\FFDA"}.mdi-format-line-spacing:before{content:"\F278"}.mdi-format-line-style:before{content:"\F5C8"}.mdi-format-line-weight:before{content:"\F5C9"}.mdi-format-list-bulleted:before{content:"\F279"}.mdi-format-list-bulleted-square:before{content:"\FDAC"}.mdi-format-list-bulleted-triangle:before{content:"\FECF"}.mdi-format-list-bulleted-type:before{content:"\F27A"}.mdi-format-list-checkbox:before{content:"\F969"}.mdi-format-list-checks:before{content:"\F755"}.mdi-format-list-numbered:before{content:"\F27B"}.mdi-format-list-numbered-rtl:before{content:"\FCE9"}.mdi-format-list-text:before{content:"\F029A"}.mdi-format-overline:before{content:"\FED0"}.mdi-format-page-break:before{content:"\F6D6"}.mdi-format-paint:before{content:"\F27C"}.mdi-format-paragraph:before{content:"\F27D"}.mdi-format-pilcrow:before{content:"\F6D7"}.mdi-format-quote-close:before{content:"\F27E"}.mdi-format-quote-close-outline:before{content:"\F01D3"}.mdi-format-quote-open:before{content:"\F756"}.mdi-format-quote-open-outline:before{content:"\F01D2"}.mdi-format-rotate-90:before{content:"\F6A9"}.mdi-format-section:before{content:"\F69E"}.mdi-format-size:before{content:"\F27F"}.mdi-format-strikethrough:before{content:"\F280"}.mdi-format-strikethrough-variant:before{content:"\F281"}.mdi-format-subscript:before{content:"\F282"}.mdi-format-superscript:before{content:"\F283"}.mdi-format-text:before{content:"\F284"}.mdi-format-text-rotation-angle-down:before{content:"\FFDB"}.mdi-format-text-rotation-angle-up:before{content:"\FFDC"}.mdi-format-text-rotation-down:before{content:"\FD4F"}.mdi-format-text-rotation-down-vertical:before{content:"\FFDD"}.mdi-format-text-rotation-none:before{content:"\FD50"}.mdi-format-text-rotation-up:before{content:"\FFDE"}.mdi-format-text-rotation-vertical:before{content:"\FFDF"}.mdi-format-text-variant:before{content:"\FE15"}.mdi-format-text-wrapping-clip:before{content:"\FCEA"}.mdi-format-text-wrapping-overflow:before{content:"\FCEB"}.mdi-format-text-wrapping-wrap:before{content:"\FCEC"}.mdi-format-textbox:before{content:"\FCED"}.mdi-format-textdirection-l-to-r:before{content:"\F285"}.mdi-format-textdirection-r-to-l:before{content:"\F286"}.mdi-format-title:before{content:"\F5F4"}.mdi-format-underline:before{content:"\F287"}.mdi-format-vertical-align-bottom:before{content:"\F621"}.mdi-format-vertical-align-center:before{content:"\F622"}.mdi-format-vertical-align-top:before{content:"\F623"}.mdi-format-wrap-inline:before{content:"\F288"}.mdi-format-wrap-square:before{content:"\F289"}.mdi-format-wrap-tight:before{content:"\F28A"}.mdi-format-wrap-top-bottom:before{content:"\F28B"}.mdi-forum:before{content:"\F28C"}.mdi-forum-outline:before{content:"\F821"}.mdi-forward:before{content:"\F28D"}.mdi-forwardburger:before{content:"\FD51"}.mdi-fountain:before{content:"\F96A"}.mdi-fountain-pen:before{content:"\FCEE"}.mdi-fountain-pen-tip:before{content:"\FCEF"}.mdi-foursquare:before{content:"\F28E"}.mdi-freebsd:before{content:"\F8DF"}.mdi-frequently-asked-questions:before{content:"\FED1"}.mdi-fridge:before{content:"\F290"}.mdi-fridge-alert:before{content:"\F01DC"}.mdi-fridge-alert-outline:before{content:"\F01DD"}.mdi-fridge-bottom:before{content:"\F292"}.mdi-fridge-off:before{content:"\F01DA"}.mdi-fridge-off-outline:before{content:"\F01DB"}.mdi-fridge-outline:before{content:"\F28F"}.mdi-fridge-top:before{content:"\F291"}.mdi-fruit-cherries:before{content:"\F0064"}.mdi-fruit-citrus:before{content:"\F0065"}.mdi-fruit-grapes:before{content:"\F0066"}.mdi-fruit-grapes-outline:before{content:"\F0067"}.mdi-fruit-pineapple:before{content:"\F0068"}.mdi-fruit-watermelon:before{content:"\F0069"}.mdi-fuel:before{content:"\F7C9"}.mdi-fullscreen:before{content:"\F293"}.mdi-fullscreen-exit:before{content:"\F294"}.mdi-function:before{content:"\F295"}.mdi-function-variant:before{content:"\F870"}.mdi-furigana-horizontal:before{content:"\F00AC"}.mdi-furigana-vertical:before{content:"\F00AD"}.mdi-fuse:before{content:"\FC61"}.mdi-fuse-blade:before{content:"\FC62"}.mdi-gamepad:before{content:"\F296"}.mdi-gamepad-circle:before{content:"\FE16"}.mdi-gamepad-circle-down:before{content:"\FE17"}.mdi-gamepad-circle-left:before{content:"\FE18"}.mdi-gamepad-circle-outline:before{content:"\FE19"}.mdi-gamepad-circle-right:before{content:"\FE1A"}.mdi-gamepad-circle-up:before{content:"\FE1B"}.mdi-gamepad-down:before{content:"\FE1C"}.mdi-gamepad-left:before{content:"\FE1D"}.mdi-gamepad-right:before{content:"\FE1E"}.mdi-gamepad-round:before{content:"\FE1F"}.mdi-gamepad-round-down:before{content:"\FE7E"}.mdi-gamepad-round-left:before{content:"\FE7F"}.mdi-gamepad-round-outline:before{content:"\FE80"}.mdi-gamepad-round-right:before{content:"\FE81"}.mdi-gamepad-round-up:before{content:"\FE82"}.mdi-gamepad-square:before{content:"\FED2"}.mdi-gamepad-square-outline:before{content:"\FED3"}.mdi-gamepad-up:before{content:"\FE83"}.mdi-gamepad-variant:before{content:"\F297"}.mdi-gamepad-variant-outline:before{content:"\FED4"}.mdi-gamma:before{content:"\F0119"}.mdi-gantry-crane:before{content:"\FDAD"}.mdi-garage:before{content:"\F6D8"}.mdi-garage-alert:before{content:"\F871"}.mdi-garage-open:before{content:"\F6D9"}.mdi-gas-cylinder:before{content:"\F647"}.mdi-gas-station:before{content:"\F298"}.mdi-gas-station-outline:before{content:"\FED5"}.mdi-gate:before{content:"\F299"}.mdi-gate-and:before{content:"\F8E0"}.mdi-gate-arrow-right:before{content:"\F0194"}.mdi-gate-nand:before{content:"\F8E1"}.mdi-gate-nor:before{content:"\F8E2"}.mdi-gate-not:before{content:"\F8E3"}.mdi-gate-open:before{content:"\F0195"}.mdi-gate-or:before{content:"\F8E4"}.mdi-gate-xnor:before{content:"\F8E5"}.mdi-gate-xor:before{content:"\F8E6"}.mdi-gatsby:before{content:"\FE84"}.mdi-gauge:before{content:"\F29A"}.mdi-gauge-empty:before{content:"\F872"}.mdi-gauge-full:before{content:"\F873"}.mdi-gauge-low:before{content:"\F874"}.mdi-gavel:before{content:"\F29B"}.mdi-gender-female:before{content:"\F29C"}.mdi-gender-male:before{content:"\F29D"}.mdi-gender-male-female:before{content:"\F29E"}.mdi-gender-male-female-variant:before{content:"\F016A"}.mdi-gender-non-binary:before{content:"\F016B"}.mdi-gender-transgender:before{content:"\F29F"}.mdi-gentoo:before{content:"\F8E7"}.mdi-gesture:before{content:"\F7CA"}.mdi-gesture-double-tap:before{content:"\F73B"}.mdi-gesture-pinch:before{content:"\FABC"}.mdi-gesture-spread:before{content:"\FABD"}.mdi-gesture-swipe:before{content:"\FD52"}.mdi-gesture-swipe-down:before{content:"\F73C"}.mdi-gesture-swipe-horizontal:before{content:"\FABE"}.mdi-gesture-swipe-left:before{content:"\F73D"}.mdi-gesture-swipe-right:before{content:"\F73E"}.mdi-gesture-swipe-up:before{content:"\F73F"}.mdi-gesture-swipe-vertical:before{content:"\FABF"}.mdi-gesture-tap:before{content:"\F740"}.mdi-gesture-tap-box:before{content:"\F02D4"}.mdi-gesture-tap-button:before{content:"\F02D3"}.mdi-gesture-tap-hold:before{content:"\FD53"}.mdi-gesture-two-double-tap:before{content:"\F741"}.mdi-gesture-two-tap:before{content:"\F742"}.mdi-ghost:before{content:"\F2A0"}.mdi-ghost-off:before{content:"\F9F4"}.mdi-gif:before{content:"\FD54"}.mdi-gift:before{content:"\FE85"}.mdi-gift-outline:before{content:"\F2A1"}.mdi-git:before{content:"\F2A2"}.mdi-github-box:before{content:"\F2A3"}.mdi-github-circle:before{content:"\F2A4"}.mdi-github-face:before{content:"\F6DA"}.mdi-gitlab:before{content:"\FB7C"}.mdi-glass-cocktail:before{content:"\F356"}.mdi-glass-flute:before{content:"\F2A5"}.mdi-glass-mug:before{content:"\F2A6"}.mdi-glass-mug-variant:before{content:"\F0141"}.mdi-glass-stange:before{content:"\F2A7"}.mdi-glass-tulip:before{content:"\F2A8"}.mdi-glass-wine:before{content:"\F875"}.mdi-glassdoor:before{content:"\F2A9"}.mdi-glasses:before{content:"\F2AA"}.mdi-globe-model:before{content:"\F8E8"}.mdi-gmail:before{content:"\F2AB"}.mdi-gnome:before{content:"\F2AC"}.mdi-go-kart:before{content:"\FD55"}.mdi-go-kart-track:before{content:"\FD56"}.mdi-gog:before{content:"\FB7D"}.mdi-gold:before{content:"\F027A"}.mdi-golf:before{content:"\F822"}.mdi-golf-cart:before{content:"\F01CF"}.mdi-golf-tee:before{content:"\F00AE"}.mdi-gondola:before{content:"\F685"}.mdi-goodreads:before{content:"\FD57"}.mdi-google:before{content:"\F2AD"}.mdi-google-adwords:before{content:"\FC63"}.mdi-google-analytics:before{content:"\F7CB"}.mdi-google-assistant:before{content:"\F7CC"}.mdi-google-cardboard:before{content:"\F2AE"}.mdi-google-chrome:before{content:"\F2AF"}.mdi-google-circles:before{content:"\F2B0"}.mdi-google-circles-communities:before{content:"\F2B1"}.mdi-google-circles-extended:before{content:"\F2B2"}.mdi-google-circles-group:before{content:"\F2B3"}.mdi-google-classroom:before{content:"\F2C0"}.mdi-google-cloud:before{content:"\F0221"}.mdi-google-controller:before{content:"\F2B4"}.mdi-google-controller-off:before{content:"\F2B5"}.mdi-google-drive:before{content:"\F2B6"}.mdi-google-earth:before{content:"\F2B7"}.mdi-google-fit:before{content:"\F96B"}.mdi-google-glass:before{content:"\F2B8"}.mdi-google-hangouts:before{content:"\F2C9"}.mdi-google-home:before{content:"\F823"}.mdi-google-keep:before{content:"\F6DB"}.mdi-google-lens:before{content:"\F9F5"}.mdi-google-maps:before{content:"\F5F5"}.mdi-google-my-business:before{content:"\F006A"}.mdi-google-nearby:before{content:"\F2B9"}.mdi-google-pages:before{content:"\F2BA"}.mdi-google-photos:before{content:"\F6DC"}.mdi-google-physical-web:before{content:"\F2BB"}.mdi-google-play:before{content:"\F2BC"}.mdi-google-plus:before{content:"\F2BD"}.mdi-google-plus-box:before{content:"\F2BE"}.mdi-google-podcast:before{content:"\FED6"}.mdi-google-spreadsheet:before{content:"\F9F6"}.mdi-google-street-view:before{content:"\FC64"}.mdi-google-translate:before{content:"\F2BF"}.mdi-gradient:before{content:"\F69F"}.mdi-grain:before{content:"\FD58"}.mdi-graph:before{content:"\F006B"}.mdi-graph-outline:before{content:"\F006C"}.mdi-graphql:before{content:"\F876"}.mdi-grave-stone:before{content:"\FB7E"}.mdi-grease-pencil:before{content:"\F648"}.mdi-greater-than:before{content:"\F96C"}.mdi-greater-than-or-equal:before{content:"\F96D"}.mdi-grid:before{content:"\F2C1"}.mdi-grid-large:before{content:"\F757"}.mdi-grid-off:before{content:"\F2C2"}.mdi-grill:before{content:"\FE86"}.mdi-grill-outline:before{content:"\F01B5"}.mdi-group:before{content:"\F2C3"}.mdi-guitar-acoustic:before{content:"\F770"}.mdi-guitar-electric:before{content:"\F2C4"}.mdi-guitar-pick:before{content:"\F2C5"}.mdi-guitar-pick-outline:before{content:"\F2C6"}.mdi-guy-fawkes-mask:before{content:"\F824"}.mdi-hackernews:before{content:"\F624"}.mdi-hail:before{content:"\FAC0"}.mdi-hair-dryer:before{content:"\F011A"}.mdi-hair-dryer-outline:before{content:"\F011B"}.mdi-halloween:before{content:"\FB7F"}.mdi-hamburger:before{content:"\F684"}.mdi-hammer:before{content:"\F8E9"}.mdi-hand:before{content:"\FA4E"}.mdi-hand-heart:before{content:"\F011C"}.mdi-hand-left:before{content:"\FE87"}.mdi-hand-okay:before{content:"\FA4F"}.mdi-hand-peace:before{content:"\FA50"}.mdi-hand-peace-variant:before{content:"\FA51"}.mdi-hand-pointing-down:before{content:"\FA52"}.mdi-hand-pointing-left:before{content:"\FA53"}.mdi-hand-pointing-right:before{content:"\F2C7"}.mdi-hand-pointing-up:before{content:"\FA54"}.mdi-hand-right:before{content:"\FE88"}.mdi-hand-saw:before{content:"\FE89"}.mdi-handball:before{content:"\FF70"}.mdi-handcuffs:before{content:"\F0169"}.mdi-handshake:before{content:"\F0243"}.mdi-hanger:before{content:"\F2C8"}.mdi-hard-hat:before{content:"\F96E"}.mdi-harddisk:before{content:"\F2CA"}.mdi-harddisk-plus:before{content:"\F006D"}.mdi-harddisk-remove:before{content:"\F006E"}.mdi-hat-fedora:before{content:"\FB80"}.mdi-hazard-lights:before{content:"\FC65"}.mdi-hdr:before{content:"\FD59"}.mdi-hdr-off:before{content:"\FD5A"}.mdi-headphones:before{content:"\F2CB"}.mdi-headphones-bluetooth:before{content:"\F96F"}.mdi-headphones-box:before{content:"\F2CC"}.mdi-headphones-off:before{content:"\F7CD"}.mdi-headphones-settings:before{content:"\F2CD"}.mdi-headset:before{content:"\F2CE"}.mdi-headset-dock:before{content:"\F2CF"}.mdi-headset-off:before{content:"\F2D0"}.mdi-heart:before{content:"\F2D1"}.mdi-heart-box:before{content:"\F2D2"}.mdi-heart-box-outline:before{content:"\F2D3"}.mdi-heart-broken:before{content:"\F2D4"}.mdi-heart-broken-outline:before{content:"\FCF0"}.mdi-heart-circle:before{content:"\F970"}.mdi-heart-circle-outline:before{content:"\F971"}.mdi-heart-flash:before{content:"\FF16"}.mdi-heart-half:before{content:"\F6DE"}.mdi-heart-half-full:before{content:"\F6DD"}.mdi-heart-half-outline:before{content:"\F6DF"}.mdi-heart-multiple:before{content:"\FA55"}.mdi-heart-multiple-outline:before{content:"\FA56"}.mdi-heart-off:before{content:"\F758"}.mdi-heart-outline:before{content:"\F2D5"}.mdi-heart-pulse:before{content:"\F5F6"}.mdi-helicopter:before{content:"\FAC1"}.mdi-help:before{content:"\F2D6"}.mdi-help-box:before{content:"\F78A"}.mdi-help-circle:before{content:"\F2D7"}.mdi-help-circle-outline:before{content:"\F625"}.mdi-help-network:before{content:"\F6F4"}.mdi-help-network-outline:before{content:"\FC66"}.mdi-help-rhombus:before{content:"\FB81"}.mdi-help-rhombus-outline:before{content:"\FB82"}.mdi-hexadecimal:before{content:"\F02D2"}.mdi-hexagon:before{content:"\F2D8"}.mdi-hexagon-multiple:before{content:"\F6E0"}.mdi-hexagon-multiple-outline:before{content:"\F011D"}.mdi-hexagon-outline:before{content:"\F2D9"}.mdi-hexagon-slice-1:before{content:"\FAC2"}.mdi-hexagon-slice-2:before{content:"\FAC3"}.mdi-hexagon-slice-3:before{content:"\FAC4"}.mdi-hexagon-slice-4:before{content:"\FAC5"}.mdi-hexagon-slice-5:before{content:"\FAC6"}.mdi-hexagon-slice-6:before{content:"\FAC7"}.mdi-hexagram:before{content:"\FAC8"}.mdi-hexagram-outline:before{content:"\FAC9"}.mdi-high-definition:before{content:"\F7CE"}.mdi-high-definition-box:before{content:"\F877"}.mdi-highway:before{content:"\F5F7"}.mdi-hiking:before{content:"\FD5B"}.mdi-hinduism:before{content:"\F972"}.mdi-history:before{content:"\F2DA"}.mdi-hockey-puck:before{content:"\F878"}.mdi-hockey-sticks:before{content:"\F879"}.mdi-hololens:before{content:"\F2DB"}.mdi-home:before{content:"\F2DC"}.mdi-home-account:before{content:"\F825"}.mdi-home-alert:before{content:"\F87A"}.mdi-home-analytics:before{content:"\FED7"}.mdi-home-assistant:before{content:"\F7CF"}.mdi-home-automation:before{content:"\F7D0"}.mdi-home-circle:before{content:"\F7D1"}.mdi-home-circle-outline:before{content:"\F006F"}.mdi-home-city:before{content:"\FCF1"}.mdi-home-city-outline:before{content:"\FCF2"}.mdi-home-currency-usd:before{content:"\F8AE"}.mdi-home-edit:before{content:"\F0184"}.mdi-home-edit-outline:before{content:"\F0185"}.mdi-home-export-outline:before{content:"\FFB8"}.mdi-home-flood:before{content:"\FF17"}.mdi-home-floor-0:before{content:"\FDAE"}.mdi-home-floor-1:before{content:"\FD5C"}.mdi-home-floor-2:before{content:"\FD5D"}.mdi-home-floor-3:before{content:"\FD5E"}.mdi-home-floor-a:before{content:"\FD5F"}.mdi-home-floor-b:before{content:"\FD60"}.mdi-home-floor-g:before{content:"\FD61"}.mdi-home-floor-l:before{content:"\FD62"}.mdi-home-floor-negative-1:before{content:"\FDAF"}.mdi-home-group:before{content:"\FDB0"}.mdi-home-heart:before{content:"\F826"}.mdi-home-import-outline:before{content:"\FFB9"}.mdi-home-lightbulb:before{content:"\F027C"}.mdi-home-lightbulb-outline:before{content:"\F027D"}.mdi-home-lock:before{content:"\F8EA"}.mdi-home-lock-open:before{content:"\F8EB"}.mdi-home-map-marker:before{content:"\F5F8"}.mdi-home-minus:before{content:"\F973"}.mdi-home-modern:before{content:"\F2DD"}.mdi-home-outline:before{content:"\F6A0"}.mdi-home-plus:before{content:"\F974"}.mdi-home-remove:before{content:"\F0272"}.mdi-home-roof:before{content:"\F0156"}.mdi-home-thermometer:before{content:"\FF71"}.mdi-home-thermometer-outline:before{content:"\FF72"}.mdi-home-variant:before{content:"\F2DE"}.mdi-home-variant-outline:before{content:"\FB83"}.mdi-hook:before{content:"\F6E1"}.mdi-hook-off:before{content:"\F6E2"}.mdi-hops:before{content:"\F2DF"}.mdi-horizontal-rotate-clockwise:before{content:"\F011E"}.mdi-horizontal-rotate-counterclockwise:before{content:"\F011F"}.mdi-horseshoe:before{content:"\FA57"}.mdi-hospital:before{content:"\F0017"}.mdi-hospital-box:before{content:"\F2E0"}.mdi-hospital-box-outline:before{content:"\F0018"}.mdi-hospital-building:before{content:"\F2E1"}.mdi-hospital-marker:before{content:"\F2E2"}.mdi-hot-tub:before{content:"\F827"}.mdi-hotel:before{content:"\F2E3"}.mdi-houzz:before{content:"\F2E4"}.mdi-houzz-box:before{content:"\F2E5"}.mdi-hubspot:before{content:"\FCF3"}.mdi-hulu:before{content:"\F828"}.mdi-human:before{content:"\F2E6"}.mdi-human-child:before{content:"\F2E7"}.mdi-human-female:before{content:"\F649"}.mdi-human-female-boy:before{content:"\FA58"}.mdi-human-female-female:before{content:"\FA59"}.mdi-human-female-girl:before{content:"\FA5A"}.mdi-human-greeting:before{content:"\F64A"}.mdi-human-handsdown:before{content:"\F64B"}.mdi-human-handsup:before{content:"\F64C"}.mdi-human-male:before{content:"\F64D"}.mdi-human-male-boy:before{content:"\FA5B"}.mdi-human-male-female:before{content:"\F2E8"}.mdi-human-male-girl:before{content:"\FA5C"}.mdi-human-male-height:before{content:"\FF18"}.mdi-human-male-height-variant:before{content:"\FF19"}.mdi-human-male-male:before{content:"\FA5D"}.mdi-human-pregnant:before{content:"\F5CF"}.mdi-humble-bundle:before{content:"\F743"}.mdi-ice-cream:before{content:"\F829"}.mdi-ice-pop:before{content:"\FF1A"}.mdi-id-card:before{content:"\FFE0"}.mdi-identifier:before{content:"\FF1B"}.mdi-iframe:before{content:"\FC67"}.mdi-iframe-array:before{content:"\F0120"}.mdi-iframe-array-outline:before{content:"\F0121"}.mdi-iframe-braces:before{content:"\F0122"}.mdi-iframe-braces-outline:before{content:"\F0123"}.mdi-iframe-outline:before{content:"\FC68"}.mdi-iframe-parentheses:before{content:"\F0124"}.mdi-iframe-parentheses-outline:before{content:"\F0125"}.mdi-iframe-variable:before{content:"\F0126"}.mdi-iframe-variable-outline:before{content:"\F0127"}.mdi-image:before{content:"\F2E9"}.mdi-image-album:before{content:"\F2EA"}.mdi-image-area:before{content:"\F2EB"}.mdi-image-area-close:before{content:"\F2EC"}.mdi-image-auto-adjust:before{content:"\FFE1"}.mdi-image-broken:before{content:"\F2ED"}.mdi-image-broken-variant:before{content:"\F2EE"}.mdi-image-edit:before{content:"\F020E"}.mdi-image-edit-outline:before{content:"\F020F"}.mdi-image-filter:before{content:"\F2EF"}.mdi-image-filter-black-white:before{content:"\F2F0"}.mdi-image-filter-center-focus:before{content:"\F2F1"}.mdi-image-filter-center-focus-strong:before{content:"\FF1C"}.mdi-image-filter-center-focus-strong-outline:before{content:"\FF1D"}.mdi-image-filter-center-focus-weak:before{content:"\F2F2"}.mdi-image-filter-drama:before{content:"\F2F3"}.mdi-image-filter-frames:before{content:"\F2F4"}.mdi-image-filter-hdr:before{content:"\F2F5"}.mdi-image-filter-none:before{content:"\F2F6"}.mdi-image-filter-tilt-shift:before{content:"\F2F7"}.mdi-image-filter-vintage:before{content:"\F2F8"}.mdi-image-frame:before{content:"\FE8A"}.mdi-image-move:before{content:"\F9F7"}.mdi-image-multiple:before{content:"\F2F9"}.mdi-image-off:before{content:"\F82A"}.mdi-image-off-outline:before{content:"\F01FC"}.mdi-image-outline:before{content:"\F975"}.mdi-image-plus:before{content:"\F87B"}.mdi-image-search:before{content:"\F976"}.mdi-image-search-outline:before{content:"\F977"}.mdi-image-size-select-actual:before{content:"\FC69"}.mdi-image-size-select-large:before{content:"\FC6A"}.mdi-image-size-select-small:before{content:"\FC6B"}.mdi-import:before{content:"\F2FA"}.mdi-inbox:before{content:"\F686"}.mdi-inbox-arrow-down:before{content:"\F2FB"}.mdi-inbox-arrow-down-outline:before{content:"\F029B"}.mdi-inbox-arrow-up:before{content:"\F3D1"}.mdi-inbox-arrow-up-outline:before{content:"\F029C"}.mdi-inbox-full:before{content:"\F029D"}.mdi-inbox-full-outline:before{content:"\F029E"}.mdi-inbox-multiple:before{content:"\F8AF"}.mdi-inbox-multiple-outline:before{content:"\FB84"}.mdi-inbox-outline:before{content:"\F029F"}.mdi-incognito:before{content:"\F5F9"}.mdi-infinity:before{content:"\F6E3"}.mdi-information:before{content:"\F2FC"}.mdi-information-outline:before{content:"\F2FD"}.mdi-information-variant:before{content:"\F64E"}.mdi-instagram:before{content:"\F2FE"}.mdi-instapaper:before{content:"\F2FF"}.mdi-instrument-triangle:before{content:"\F0070"}.mdi-internet-explorer:before{content:"\F300"}.mdi-invert-colors:before{content:"\F301"}.mdi-invert-colors-off:before{content:"\FE8B"}.mdi-ip:before{content:"\FA5E"}.mdi-ip-network:before{content:"\FA5F"}.mdi-ip-network-outline:before{content:"\FC6C"}.mdi-ipod:before{content:"\FC6D"}.mdi-islam:before{content:"\F978"}.mdi-island:before{content:"\F0071"}.mdi-itunes:before{content:"\F676"}.mdi-iv-bag:before{content:"\F00E4"}.mdi-jabber:before{content:"\FDB1"}.mdi-jeepney:before{content:"\F302"}.mdi-jellyfish:before{content:"\FF1E"}.mdi-jellyfish-outline:before{content:"\FF1F"}.mdi-jira:before{content:"\F303"}.mdi-jquery:before{content:"\F87C"}.mdi-jsfiddle:before{content:"\F304"}.mdi-json:before{content:"\F626"}.mdi-judaism:before{content:"\F979"}.mdi-kabaddi:before{content:"\FD63"}.mdi-karate:before{content:"\F82B"}.mdi-keg:before{content:"\F305"}.mdi-kettle:before{content:"\F5FA"}.mdi-kettle-outline:before{content:"\FF73"}.mdi-key:before{content:"\F306"}.mdi-key-change:before{content:"\F307"}.mdi-key-link:before{content:"\F01CA"}.mdi-key-minus:before{content:"\F308"}.mdi-key-outline:before{content:"\FDB2"}.mdi-key-plus:before{content:"\F309"}.mdi-key-remove:before{content:"\F30A"}.mdi-key-star:before{content:"\F01C9"}.mdi-key-variant:before{content:"\F30B"}.mdi-key-wireless:before{content:"\FFE2"}.mdi-keyboard:before{content:"\F30C"}.mdi-keyboard-backspace:before{content:"\F30D"}.mdi-keyboard-caps:before{content:"\F30E"}.mdi-keyboard-close:before{content:"\F30F"}.mdi-keyboard-esc:before{content:"\F02E2"}.mdi-keyboard-f1:before{content:"\F02D6"}.mdi-keyboard-f10:before{content:"\F02DF"}.mdi-keyboard-f11:before{content:"\F02E0"}.mdi-keyboard-f12:before{content:"\F02E1"}.mdi-keyboard-f2:before{content:"\F02D7"}.mdi-keyboard-f3:before{content:"\F02D8"}.mdi-keyboard-f4:before{content:"\F02D9"}.mdi-keyboard-f5:before{content:"\F02DA"}.mdi-keyboard-f6:before{content:"\F02DB"}.mdi-keyboard-f7:before{content:"\F02DC"}.mdi-keyboard-f8:before{content:"\F02DD"}.mdi-keyboard-f9:before{content:"\F02DE"}.mdi-keyboard-off:before{content:"\F310"}.mdi-keyboard-off-outline:before{content:"\FE8C"}.mdi-keyboard-outline:before{content:"\F97A"}.mdi-keyboard-return:before{content:"\F311"}.mdi-keyboard-settings:before{content:"\F9F8"}.mdi-keyboard-settings-outline:before{content:"\F9F9"}.mdi-keyboard-space:before{content:"\F0072"}.mdi-keyboard-tab:before{content:"\F312"}.mdi-keyboard-variant:before{content:"\F313"}.mdi-khanda:before{content:"\F0128"}.mdi-kickstarter:before{content:"\F744"}.mdi-knife:before{content:"\F9FA"}.mdi-knife-military:before{content:"\F9FB"}.mdi-kodi:before{content:"\F314"}.mdi-kotlin:before{content:"\F0244"}.mdi-kubernetes:before{content:"\F0129"}.mdi-label:before{content:"\F315"}.mdi-label-off:before{content:"\FACA"}.mdi-label-off-outline:before{content:"\FACB"}.mdi-label-outline:before{content:"\F316"}.mdi-label-variant:before{content:"\FACC"}.mdi-label-variant-outline:before{content:"\FACD"}.mdi-ladybug:before{content:"\F82C"}.mdi-lambda:before{content:"\F627"}.mdi-lamp:before{content:"\F6B4"}.mdi-lan:before{content:"\F317"}.mdi-lan-check:before{content:"\F02D5"}.mdi-lan-connect:before{content:"\F318"}.mdi-lan-disconnect:before{content:"\F319"}.mdi-lan-pending:before{content:"\F31A"}.mdi-language-c:before{content:"\F671"}.mdi-language-cpp:before{content:"\F672"}.mdi-language-csharp:before{content:"\F31B"}.mdi-language-css3:before{content:"\F31C"}.mdi-language-fortran:before{content:"\F0245"}.mdi-language-go:before{content:"\F7D2"}.mdi-language-haskell:before{content:"\FC6E"}.mdi-language-html5:before{content:"\F31D"}.mdi-language-java:before{content:"\FB1C"}.mdi-language-javascript:before{content:"\F31E"}.mdi-language-lua:before{content:"\F8B0"}.mdi-language-php:before{content:"\F31F"}.mdi-language-python:before{content:"\F320"}.mdi-language-python-text:before{content:"\F321"}.mdi-language-r:before{content:"\F7D3"}.mdi-language-ruby-on-rails:before{content:"\FACE"}.mdi-language-swift:before{content:"\F6E4"}.mdi-language-typescript:before{content:"\F6E5"}.mdi-laptop:before{content:"\F322"}.mdi-laptop-chromebook:before{content:"\F323"}.mdi-laptop-mac:before{content:"\F324"}.mdi-laptop-off:before{content:"\F6E6"}.mdi-laptop-windows:before{content:"\F325"}.mdi-laravel:before{content:"\FACF"}.mdi-lasso:before{content:"\FF20"}.mdi-lastfm:before{content:"\F326"}.mdi-lastpass:before{content:"\F446"}.mdi-latitude:before{content:"\FF74"}.mdi-launch:before{content:"\F327"}.mdi-lava-lamp:before{content:"\F7D4"}.mdi-layers:before{content:"\F328"}.mdi-layers-minus:before{content:"\FE8D"}.mdi-layers-off:before{content:"\F329"}.mdi-layers-off-outline:before{content:"\F9FC"}.mdi-layers-outline:before{content:"\F9FD"}.mdi-layers-plus:before{content:"\FE30"}.mdi-layers-remove:before{content:"\FE31"}.mdi-layers-search:before{content:"\F0231"}.mdi-layers-search-outline:before{content:"\F0232"}.mdi-layers-triple:before{content:"\FF75"}.mdi-layers-triple-outline:before{content:"\FF76"}.mdi-lead-pencil:before{content:"\F64F"}.mdi-leaf:before{content:"\F32A"}.mdi-leaf-maple:before{content:"\FC6F"}.mdi-leak:before{content:"\FDB3"}.mdi-leak-off:before{content:"\FDB4"}.mdi-led-off:before{content:"\F32B"}.mdi-led-on:before{content:"\F32C"}.mdi-led-outline:before{content:"\F32D"}.mdi-led-strip:before{content:"\F7D5"}.mdi-led-strip-variant:before{content:"\F0073"}.mdi-led-variant-off:before{content:"\F32E"}.mdi-led-variant-on:before{content:"\F32F"}.mdi-led-variant-outline:before{content:"\F330"}.mdi-leek:before{content:"\F01A8"}.mdi-less-than:before{content:"\F97B"}.mdi-less-than-or-equal:before{content:"\F97C"}.mdi-library:before{content:"\F331"}.mdi-library-books:before{content:"\F332"}.mdi-library-movie:before{content:"\FCF4"}.mdi-library-music:before{content:"\F333"}.mdi-library-music-outline:before{content:"\FF21"}.mdi-library-shelves:before{content:"\FB85"}.mdi-library-video:before{content:"\FCF5"}.mdi-license:before{content:"\FFE3"}.mdi-lifebuoy:before{content:"\F87D"}.mdi-light-switch:before{content:"\F97D"}.mdi-lightbulb:before{content:"\F335"}.mdi-lightbulb-cfl:before{content:"\F0233"}.mdi-lightbulb-cfl-off:before{content:"\F0234"}.mdi-lightbulb-cfl-spiral:before{content:"\F02A0"}.mdi-lightbulb-group:before{content:"\F027E"}.mdi-lightbulb-group-outline:before{content:"\F027F"}.mdi-lightbulb-multiple:before{content:"\F0280"}.mdi-lightbulb-multiple-outline:before{content:"\F0281"}.mdi-lightbulb-off:before{content:"\FE32"}.mdi-lightbulb-off-outline:before{content:"\FE33"}.mdi-lightbulb-on:before{content:"\F6E7"}.mdi-lightbulb-on-outline:before{content:"\F6E8"}.mdi-lightbulb-outline:before{content:"\F336"}.mdi-lighthouse:before{content:"\F9FE"}.mdi-lighthouse-on:before{content:"\F9FF"}.mdi-link:before{content:"\F337"}.mdi-link-box:before{content:"\FCF6"}.mdi-link-box-outline:before{content:"\FCF7"}.mdi-link-box-variant:before{content:"\FCF8"}.mdi-link-box-variant-outline:before{content:"\FCF9"}.mdi-link-lock:before{content:"\F00E5"}.mdi-link-off:before{content:"\F338"}.mdi-link-plus:before{content:"\FC70"}.mdi-link-variant:before{content:"\F339"}.mdi-link-variant-minus:before{content:"\F012A"}.mdi-link-variant-off:before{content:"\F33A"}.mdi-link-variant-plus:before{content:"\F012B"}.mdi-link-variant-remove:before{content:"\F012C"}.mdi-linkedin:before{content:"\F33B"}.mdi-linkedin-box:before{content:"\F33C"}.mdi-linux:before{content:"\F33D"}.mdi-linux-mint:before{content:"\F8EC"}.mdi-litecoin:before{content:"\FA60"}.mdi-loading:before{content:"\F771"}.mdi-location-enter:before{content:"\FFE4"}.mdi-location-exit:before{content:"\FFE5"}.mdi-lock:before{content:"\F33E"}.mdi-lock-alert:before{content:"\F8ED"}.mdi-lock-clock:before{content:"\F97E"}.mdi-lock-open:before{content:"\F33F"}.mdi-lock-open-outline:before{content:"\F340"}.mdi-lock-open-variant:before{content:"\FFE6"}.mdi-lock-open-variant-outline:before{content:"\FFE7"}.mdi-lock-outline:before{content:"\F341"}.mdi-lock-pattern:before{content:"\F6E9"}.mdi-lock-plus:before{content:"\F5FB"}.mdi-lock-question:before{content:"\F8EE"}.mdi-lock-reset:before{content:"\F772"}.mdi-lock-smart:before{content:"\F8B1"}.mdi-locker:before{content:"\F7D6"}.mdi-locker-multiple:before{content:"\F7D7"}.mdi-login:before{content:"\F342"}.mdi-login-variant:before{content:"\F5FC"}.mdi-logout:before{content:"\F343"}.mdi-logout-variant:before{content:"\F5FD"}.mdi-longitude:before{content:"\FF77"}.mdi-looks:before{content:"\F344"}.mdi-loupe:before{content:"\F345"}.mdi-lumx:before{content:"\F346"}.mdi-lungs:before{content:"\F00AF"}.mdi-lyft:before{content:"\FB1D"}.mdi-magnet:before{content:"\F347"}.mdi-magnet-on:before{content:"\F348"}.mdi-magnify:before{content:"\F349"}.mdi-magnify-close:before{content:"\F97F"}.mdi-magnify-minus:before{content:"\F34A"}.mdi-magnify-minus-cursor:before{content:"\FA61"}.mdi-magnify-minus-outline:before{content:"\F6EB"}.mdi-magnify-plus:before{content:"\F34B"}.mdi-magnify-plus-cursor:before{content:"\FA62"}.mdi-magnify-plus-outline:before{content:"\F6EC"}.mdi-magnify-remove-cursor:before{content:"\F0237"}.mdi-magnify-remove-outline:before{content:"\F0238"}.mdi-magnify-scan:before{content:"\F02A1"}.mdi-mail:before{content:"\FED8"}.mdi-mail-ru:before{content:"\F34C"}.mdi-mailbox:before{content:"\F6ED"}.mdi-mailbox-open:before{content:"\FD64"}.mdi-mailbox-open-outline:before{content:"\FD65"}.mdi-mailbox-open-up:before{content:"\FD66"}.mdi-mailbox-open-up-outline:before{content:"\FD67"}.mdi-mailbox-outline:before{content:"\FD68"}.mdi-mailbox-up:before{content:"\FD69"}.mdi-mailbox-up-outline:before{content:"\FD6A"}.mdi-map:before{content:"\F34D"}.mdi-map-check:before{content:"\FED9"}.mdi-map-check-outline:before{content:"\FEDA"}.mdi-map-clock:before{content:"\FCFA"}.mdi-map-clock-outline:before{content:"\FCFB"}.mdi-map-legend:before{content:"\FA00"}.mdi-map-marker:before{content:"\F34E"}.mdi-map-marker-alert:before{content:"\FF22"}.mdi-map-marker-alert-outline:before{content:"\FF23"}.mdi-map-marker-check:before{content:"\FC71"}.mdi-map-marker-circle:before{content:"\F34F"}.mdi-map-marker-distance:before{content:"\F8EF"}.mdi-map-marker-down:before{content:"\F012D"}.mdi-map-marker-minus:before{content:"\F650"}.mdi-map-marker-multiple:before{content:"\F350"}.mdi-map-marker-multiple-outline:before{content:"\F02A2"}.mdi-map-marker-off:before{content:"\F351"}.mdi-map-marker-outline:before{content:"\F7D8"}.mdi-map-marker-path:before{content:"\FCFC"}.mdi-map-marker-plus:before{content:"\F651"}.mdi-map-marker-question:before{content:"\FF24"}.mdi-map-marker-question-outline:before{content:"\FF25"}.mdi-map-marker-radius:before{content:"\F352"}.mdi-map-marker-remove:before{content:"\FF26"}.mdi-map-marker-remove-variant:before{content:"\FF27"}.mdi-map-marker-up:before{content:"\F012E"}.mdi-map-minus:before{content:"\F980"}.mdi-map-outline:before{content:"\F981"}.mdi-map-plus:before{content:"\F982"}.mdi-map-search:before{content:"\F983"}.mdi-map-search-outline:before{content:"\F984"}.mdi-mapbox:before{content:"\FB86"}.mdi-margin:before{content:"\F353"}.mdi-markdown:before{content:"\F354"}.mdi-markdown-outline:before{content:"\FF78"}.mdi-marker:before{content:"\F652"}.mdi-marker-cancel:before{content:"\FDB5"}.mdi-marker-check:before{content:"\F355"}.mdi-mastodon:before{content:"\FAD0"}.mdi-mastodon-variant:before{content:"\FAD1"}.mdi-material-design:before{content:"\F985"}.mdi-material-ui:before{content:"\F357"}.mdi-math-compass:before{content:"\F358"}.mdi-math-cos:before{content:"\FC72"}.mdi-math-integral:before{content:"\FFE8"}.mdi-math-integral-box:before{content:"\FFE9"}.mdi-math-log:before{content:"\F00B0"}.mdi-math-norm:before{content:"\FFEA"}.mdi-math-norm-box:before{content:"\FFEB"}.mdi-math-sin:before{content:"\FC73"}.mdi-math-tan:before{content:"\FC74"}.mdi-matrix:before{content:"\F628"}.mdi-maxcdn:before{content:"\F359"}.mdi-medal:before{content:"\F986"}.mdi-medical-bag:before{content:"\F6EE"}.mdi-meditation:before{content:"\F01A6"}.mdi-medium:before{content:"\F35A"}.mdi-meetup:before{content:"\FAD2"}.mdi-memory:before{content:"\F35B"}.mdi-menu:before{content:"\F35C"}.mdi-menu-down:before{content:"\F35D"}.mdi-menu-down-outline:before{content:"\F6B5"}.mdi-menu-left:before{content:"\F35E"}.mdi-menu-left-outline:before{content:"\FA01"}.mdi-menu-open:before{content:"\FB87"}.mdi-menu-right:before{content:"\F35F"}.mdi-menu-right-outline:before{content:"\FA02"}.mdi-menu-swap:before{content:"\FA63"}.mdi-menu-swap-outline:before{content:"\FA64"}.mdi-menu-up:before{content:"\F360"}.mdi-menu-up-outline:before{content:"\F6B6"}.mdi-merge:before{content:"\FF79"}.mdi-message:before{content:"\F361"}.mdi-message-alert:before{content:"\F362"}.mdi-message-alert-outline:before{content:"\FA03"}.mdi-message-bulleted:before{content:"\F6A1"}.mdi-message-bulleted-off:before{content:"\F6A2"}.mdi-message-draw:before{content:"\F363"}.mdi-message-image:before{content:"\F364"}.mdi-message-image-outline:before{content:"\F0197"}.mdi-message-lock:before{content:"\FFEC"}.mdi-message-lock-outline:before{content:"\F0198"}.mdi-message-minus:before{content:"\F0199"}.mdi-message-minus-outline:before{content:"\F019A"}.mdi-message-outline:before{content:"\F365"}.mdi-message-plus:before{content:"\F653"}.mdi-message-plus-outline:before{content:"\F00E6"}.mdi-message-processing:before{content:"\F366"}.mdi-message-processing-outline:before{content:"\F019B"}.mdi-message-reply:before{content:"\F367"}.mdi-message-reply-text:before{content:"\F368"}.mdi-message-settings:before{content:"\F6EF"}.mdi-message-settings-outline:before{content:"\F019C"}.mdi-message-settings-variant:before{content:"\F6F0"}.mdi-message-settings-variant-outline:before{content:"\F019D"}.mdi-message-text:before{content:"\F369"}.mdi-message-text-clock:before{content:"\F019E"}.mdi-message-text-clock-outline:before{content:"\F019F"}.mdi-message-text-lock:before{content:"\FFED"}.mdi-message-text-lock-outline:before{content:"\F01A0"}.mdi-message-text-outline:before{content:"\F36A"}.mdi-message-video:before{content:"\F36B"}.mdi-meteor:before{content:"\F629"}.mdi-metronome:before{content:"\F7D9"}.mdi-metronome-tick:before{content:"\F7DA"}.mdi-micro-sd:before{content:"\F7DB"}.mdi-microphone:before{content:"\F36C"}.mdi-microphone-minus:before{content:"\F8B2"}.mdi-microphone-off:before{content:"\F36D"}.mdi-microphone-outline:before{content:"\F36E"}.mdi-microphone-plus:before{content:"\F8B3"}.mdi-microphone-settings:before{content:"\F36F"}.mdi-microphone-variant:before{content:"\F370"}.mdi-microphone-variant-off:before{content:"\F371"}.mdi-microscope:before{content:"\F654"}.mdi-microsoft:before{content:"\F372"}.mdi-microsoft-dynamics:before{content:"\F987"}.mdi-microwave:before{content:"\FC75"}.mdi-middleware:before{content:"\FF7A"}.mdi-middleware-outline:before{content:"\FF7B"}.mdi-midi:before{content:"\F8F0"}.mdi-midi-port:before{content:"\F8F1"}.mdi-mine:before{content:"\FDB6"}.mdi-minecraft:before{content:"\F373"}.mdi-mini-sd:before{content:"\FA04"}.mdi-minidisc:before{content:"\FA05"}.mdi-minus:before{content:"\F374"}.mdi-minus-box:before{content:"\F375"}.mdi-minus-box-multiple:before{content:"\F016C"}.mdi-minus-box-multiple-outline:before{content:"\F016D"}.mdi-minus-box-outline:before{content:"\F6F1"}.mdi-minus-circle:before{content:"\F376"}.mdi-minus-circle-outline:before{content:"\F377"}.mdi-minus-network:before{content:"\F378"}.mdi-minus-network-outline:before{content:"\FC76"}.mdi-mirror:before{content:"\F0228"}.mdi-mixcloud:before{content:"\F62A"}.mdi-mixed-martial-arts:before{content:"\FD6B"}.mdi-mixed-reality:before{content:"\F87E"}.mdi-mixer:before{content:"\F7DC"}.mdi-molecule:before{content:"\FB88"}.mdi-monitor:before{content:"\F379"}.mdi-monitor-cellphone:before{content:"\F988"}.mdi-monitor-cellphone-star:before{content:"\F989"}.mdi-monitor-clean:before{content:"\F012F"}.mdi-monitor-dashboard:before{content:"\FA06"}.mdi-monitor-lock:before{content:"\FDB7"}.mdi-monitor-multiple:before{content:"\F37A"}.mdi-monitor-off:before{content:"\FD6C"}.mdi-monitor-screenshot:before{content:"\FE34"}.mdi-monitor-speaker:before{content:"\FF7C"}.mdi-monitor-speaker-off:before{content:"\FF7D"}.mdi-monitor-star:before{content:"\FDB8"}.mdi-moon-first-quarter:before{content:"\FF7E"}.mdi-moon-full:before{content:"\FF7F"}.mdi-moon-last-quarter:before{content:"\FF80"}.mdi-moon-new:before{content:"\FF81"}.mdi-moon-waning-crescent:before{content:"\FF82"}.mdi-moon-waning-gibbous:before{content:"\FF83"}.mdi-moon-waxing-crescent:before{content:"\FF84"}.mdi-moon-waxing-gibbous:before{content:"\FF85"}.mdi-moped:before{content:"\F00B1"}.mdi-more:before{content:"\F37B"}.mdi-mother-nurse:before{content:"\FCFD"}.mdi-motion-sensor:before{content:"\FD6D"}.mdi-motorbike:before{content:"\F37C"}.mdi-mouse:before{content:"\F37D"}.mdi-mouse-bluetooth:before{content:"\F98A"}.mdi-mouse-off:before{content:"\F37E"}.mdi-mouse-variant:before{content:"\F37F"}.mdi-mouse-variant-off:before{content:"\F380"}.mdi-move-resize:before{content:"\F655"}.mdi-move-resize-variant:before{content:"\F656"}.mdi-movie:before{content:"\F381"}.mdi-movie-edit:before{content:"\F014D"}.mdi-movie-edit-outline:before{content:"\F014E"}.mdi-movie-filter:before{content:"\F014F"}.mdi-movie-filter-outline:before{content:"\F0150"}.mdi-movie-open:before{content:"\FFEE"}.mdi-movie-open-outline:before{content:"\FFEF"}.mdi-movie-outline:before{content:"\FDB9"}.mdi-movie-roll:before{content:"\F7DD"}.mdi-movie-search:before{content:"\F01FD"}.mdi-movie-search-outline:before{content:"\F01FE"}.mdi-muffin:before{content:"\F98B"}.mdi-multiplication:before{content:"\F382"}.mdi-multiplication-box:before{content:"\F383"}.mdi-mushroom:before{content:"\F7DE"}.mdi-mushroom-outline:before{content:"\F7DF"}.mdi-music:before{content:"\F759"}.mdi-music-accidental-double-flat:before{content:"\FF86"}.mdi-music-accidental-double-sharp:before{content:"\FF87"}.mdi-music-accidental-flat:before{content:"\FF88"}.mdi-music-accidental-natural:before{content:"\FF89"}.mdi-music-accidental-sharp:before{content:"\FF8A"}.mdi-music-box:before{content:"\F384"}.mdi-music-box-outline:before{content:"\F385"}.mdi-music-circle:before{content:"\F386"}.mdi-music-circle-outline:before{content:"\FAD3"}.mdi-music-clef-alto:before{content:"\FF8B"}.mdi-music-clef-bass:before{content:"\FF8C"}.mdi-music-clef-treble:before{content:"\FF8D"}.mdi-music-note:before{content:"\F387"}.mdi-music-note-bluetooth:before{content:"\F5FE"}.mdi-music-note-bluetooth-off:before{content:"\F5FF"}.mdi-music-note-eighth:before{content:"\F388"}.mdi-music-note-eighth-dotted:before{content:"\FF8E"}.mdi-music-note-half:before{content:"\F389"}.mdi-music-note-half-dotted:before{content:"\FF8F"}.mdi-music-note-off:before{content:"\F38A"}.mdi-music-note-off-outline:before{content:"\FF90"}.mdi-music-note-outline:before{content:"\FF91"}.mdi-music-note-plus:before{content:"\FDBA"}.mdi-music-note-quarter:before{content:"\F38B"}.mdi-music-note-quarter-dotted:before{content:"\FF92"}.mdi-music-note-sixteenth:before{content:"\F38C"}.mdi-music-note-sixteenth-dotted:before{content:"\FF93"}.mdi-music-note-whole:before{content:"\F38D"}.mdi-music-note-whole-dotted:before{content:"\FF94"}.mdi-music-off:before{content:"\F75A"}.mdi-music-rest-eighth:before{content:"\FF95"}.mdi-music-rest-half:before{content:"\FF96"}.mdi-music-rest-quarter:before{content:"\FF97"}.mdi-music-rest-sixteenth:before{content:"\FF98"}.mdi-music-rest-whole:before{content:"\FF99"}.mdi-nail:before{content:"\FDBB"}.mdi-nas:before{content:"\F8F2"}.mdi-nativescript:before{content:"\F87F"}.mdi-nature:before{content:"\F38E"}.mdi-nature-people:before{content:"\F38F"}.mdi-navigation:before{content:"\F390"}.mdi-near-me:before{content:"\F5CD"}.mdi-necklace:before{content:"\FF28"}.mdi-needle:before{content:"\F391"}.mdi-netflix:before{content:"\F745"}.mdi-network:before{content:"\F6F2"}.mdi-network-off:before{content:"\FC77"}.mdi-network-off-outline:before{content:"\FC78"}.mdi-network-outline:before{content:"\FC79"}.mdi-network-router:before{content:"\F00B2"}.mdi-network-strength-1:before{content:"\F8F3"}.mdi-network-strength-1-alert:before{content:"\F8F4"}.mdi-network-strength-2:before{content:"\F8F5"}.mdi-network-strength-2-alert:before{content:"\F8F6"}.mdi-network-strength-3:before{content:"\F8F7"}.mdi-network-strength-3-alert:before{content:"\F8F8"}.mdi-network-strength-4:before{content:"\F8F9"}.mdi-network-strength-4-alert:before{content:"\F8FA"}.mdi-network-strength-off:before{content:"\F8FB"}.mdi-network-strength-off-outline:before{content:"\F8FC"}.mdi-network-strength-outline:before{content:"\F8FD"}.mdi-new-box:before{content:"\F394"}.mdi-newspaper:before{content:"\F395"}.mdi-newspaper-minus:before{content:"\FF29"}.mdi-newspaper-plus:before{content:"\FF2A"}.mdi-newspaper-variant:before{content:"\F0023"}.mdi-newspaper-variant-multiple:before{content:"\F0024"}.mdi-newspaper-variant-multiple-outline:before{content:"\F0025"}.mdi-newspaper-variant-outline:before{content:"\F0026"}.mdi-nfc:before{content:"\F396"}.mdi-nfc-off:before{content:"\FE35"}.mdi-nfc-search-variant:before{content:"\FE36"}.mdi-nfc-tap:before{content:"\F397"}.mdi-nfc-variant:before{content:"\F398"}.mdi-nfc-variant-off:before{content:"\FE37"}.mdi-ninja:before{content:"\F773"}.mdi-nintendo-switch:before{content:"\F7E0"}.mdi-nix:before{content:"\F0130"}.mdi-nodejs:before{content:"\F399"}.mdi-noodles:before{content:"\F01A9"}.mdi-not-equal:before{content:"\F98C"}.mdi-not-equal-variant:before{content:"\F98D"}.mdi-note:before{content:"\F39A"}.mdi-note-multiple:before{content:"\F6B7"}.mdi-note-multiple-outline:before{content:"\F6B8"}.mdi-note-outline:before{content:"\F39B"}.mdi-note-plus:before{content:"\F39C"}.mdi-note-plus-outline:before{content:"\F39D"}.mdi-note-text:before{content:"\F39E"}.mdi-note-text-outline:before{content:"\F0202"}.mdi-notebook:before{content:"\F82D"}.mdi-notebook-multiple:before{content:"\FE38"}.mdi-notebook-outline:before{content:"\FEDC"}.mdi-notification-clear-all:before{content:"\F39F"}.mdi-npm:before{content:"\F6F6"}.mdi-npm-variant:before{content:"\F98E"}.mdi-npm-variant-outline:before{content:"\F98F"}.mdi-nuke:before{content:"\F6A3"}.mdi-null:before{content:"\F7E1"}.mdi-numeric:before{content:"\F3A0"}.mdi-numeric-0:before{content:"0"}.mdi-numeric-0-box:before{content:"\F3A1"}.mdi-numeric-0-box-multiple:before{content:"\FF2B"}.mdi-numeric-0-box-multiple-outline:before{content:"\F3A2"}.mdi-numeric-0-box-outline:before{content:"\F3A3"}.mdi-numeric-0-circle:before{content:"\FC7A"}.mdi-numeric-0-circle-outline:before{content:"\FC7B"}.mdi-numeric-1:before{content:"1"}.mdi-numeric-1-box:before{content:"\F3A4"}.mdi-numeric-1-box-multiple:before{content:"\FF2C"}.mdi-numeric-1-box-multiple-outline:before{content:"\F3A5"}.mdi-numeric-1-box-outline:before{content:"\F3A6"}.mdi-numeric-1-circle:before{content:"\FC7C"}.mdi-numeric-1-circle-outline:before{content:"\FC7D"}.mdi-numeric-10:before{content:"\F000A"}.mdi-numeric-10-box:before{content:"\FF9A"}.mdi-numeric-10-box-multiple:before{content:"\F000B"}.mdi-numeric-10-box-multiple-outline:before{content:"\F000C"}.mdi-numeric-10-box-outline:before{content:"\FF9B"}.mdi-numeric-10-circle:before{content:"\F000D"}.mdi-numeric-10-circle-outline:before{content:"\F000E"}.mdi-numeric-2:before{content:"2"}.mdi-numeric-2-box:before{content:"\F3A7"}.mdi-numeric-2-box-multiple:before{content:"\FF2D"}.mdi-numeric-2-box-multiple-outline:before{content:"\F3A8"}.mdi-numeric-2-box-outline:before{content:"\F3A9"}.mdi-numeric-2-circle:before{content:"\FC7E"}.mdi-numeric-2-circle-outline:before{content:"\FC7F"}.mdi-numeric-3:before{content:"3"}.mdi-numeric-3-box:before{content:"\F3AA"}.mdi-numeric-3-box-multiple:before{content:"\FF2E"}.mdi-numeric-3-box-multiple-outline:before{content:"\F3AB"}.mdi-numeric-3-box-outline:before{content:"\F3AC"}.mdi-numeric-3-circle:before{content:"\FC80"}.mdi-numeric-3-circle-outline:before{content:"\FC81"}.mdi-numeric-4:before{content:"4"}.mdi-numeric-4-box:before{content:"\F3AD"}.mdi-numeric-4-box-multiple:before{content:"\FF2F"}.mdi-numeric-4-box-multiple-outline:before{content:"\F3AE"}.mdi-numeric-4-box-outline:before{content:"\F3AF"}.mdi-numeric-4-circle:before{content:"\FC82"}.mdi-numeric-4-circle-outline:before{content:"\FC83"}.mdi-numeric-5:before{content:"5"}.mdi-numeric-5-box:before{content:"\F3B0"}.mdi-numeric-5-box-multiple:before{content:"\FF30"}.mdi-numeric-5-box-multiple-outline:before{content:"\F3B1"}.mdi-numeric-5-box-outline:before{content:"\F3B2"}.mdi-numeric-5-circle:before{content:"\FC84"}.mdi-numeric-5-circle-outline:before{content:"\FC85"}.mdi-numeric-6:before{content:"6"}.mdi-numeric-6-box:before{content:"\F3B3"}.mdi-numeric-6-box-multiple:before{content:"\FF31"}.mdi-numeric-6-box-multiple-outline:before{content:"\F3B4"}.mdi-numeric-6-box-outline:before{content:"\F3B5"}.mdi-numeric-6-circle:before{content:"\FC86"}.mdi-numeric-6-circle-outline:before{content:"\FC87"}.mdi-numeric-7:before{content:"7"}.mdi-numeric-7-box:before{content:"\F3B6"}.mdi-numeric-7-box-multiple:before{content:"\FF32"}.mdi-numeric-7-box-multiple-outline:before{content:"\F3B7"}.mdi-numeric-7-box-outline:before{content:"\F3B8"}.mdi-numeric-7-circle:before{content:"\FC88"}.mdi-numeric-7-circle-outline:before{content:"\FC89"}.mdi-numeric-8:before{content:"8"}.mdi-numeric-8-box:before{content:"\F3B9"}.mdi-numeric-8-box-multiple:before{content:"\FF33"}.mdi-numeric-8-box-multiple-outline:before{content:"\F3BA"}.mdi-numeric-8-box-outline:before{content:"\F3BB"}.mdi-numeric-8-circle:before{content:"\FC8A"}.mdi-numeric-8-circle-outline:before{content:"\FC8B"}.mdi-numeric-9:before{content:"9"}.mdi-numeric-9-box:before{content:"\F3BC"}.mdi-numeric-9-box-multiple:before{content:"\FF34"}.mdi-numeric-9-box-multiple-outline:before{content:"\F3BD"}.mdi-numeric-9-box-outline:before{content:"\F3BE"}.mdi-numeric-9-circle:before{content:"\FC8C"}.mdi-numeric-9-circle-outline:before{content:"\FC8D"}.mdi-numeric-9-plus:before{content:"\F000F"}.mdi-numeric-9-plus-box:before{content:"\F3BF"}.mdi-numeric-9-plus-box-multiple:before{content:"\FF35"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"\F3C0"}.mdi-numeric-9-plus-box-outline:before{content:"\F3C1"}.mdi-numeric-9-plus-circle:before{content:"\FC8E"}.mdi-numeric-9-plus-circle-outline:before{content:"\FC8F"}.mdi-numeric-negative-1:before{content:"\F0074"}.mdi-nut:before{content:"\F6F7"}.mdi-nutrition:before{content:"\F3C2"}.mdi-nuxt:before{content:"\F0131"}.mdi-oar:before{content:"\F67B"}.mdi-ocarina:before{content:"\FDBC"}.mdi-ocr:before{content:"\F0165"}.mdi-octagon:before{content:"\F3C3"}.mdi-octagon-outline:before{content:"\F3C4"}.mdi-octagram:before{content:"\F6F8"}.mdi-octagram-outline:before{content:"\F774"}.mdi-odnoklassniki:before{content:"\F3C5"}.mdi-offer:before{content:"\F0246"}.mdi-office:before{content:"\F3C6"}.mdi-office-building:before{content:"\F990"}.mdi-oil:before{content:"\F3C7"}.mdi-oil-lamp:before{content:"\FF36"}.mdi-oil-level:before{content:"\F0075"}.mdi-oil-temperature:before{content:"\F0019"}.mdi-omega:before{content:"\F3C9"}.mdi-one-up:before{content:"\FB89"}.mdi-onedrive:before{content:"\F3CA"}.mdi-onenote:before{content:"\F746"}.mdi-onepassword:before{content:"\F880"}.mdi-opacity:before{content:"\F5CC"}.mdi-open-in-app:before{content:"\F3CB"}.mdi-open-in-new:before{content:"\F3CC"}.mdi-open-source-initiative:before{content:"\FB8A"}.mdi-openid:before{content:"\F3CD"}.mdi-opera:before{content:"\F3CE"}.mdi-orbit:before{content:"\F018"}.mdi-origin:before{content:"\FB2B"}.mdi-ornament:before{content:"\F3CF"}.mdi-ornament-variant:before{content:"\F3D0"}.mdi-outdoor-lamp:before{content:"\F0076"}.mdi-outlook:before{content:"\FCFE"}.mdi-overscan:before{content:"\F0027"}.mdi-owl:before{content:"\F3D2"}.mdi-pac-man:before{content:"\FB8B"}.mdi-package:before{content:"\F3D3"}.mdi-package-down:before{content:"\F3D4"}.mdi-package-up:before{content:"\F3D5"}.mdi-package-variant:before{content:"\F3D6"}.mdi-package-variant-closed:before{content:"\F3D7"}.mdi-page-first:before{content:"\F600"}.mdi-page-last:before{content:"\F601"}.mdi-page-layout-body:before{content:"\F6F9"}.mdi-page-layout-footer:before{content:"\F6FA"}.mdi-page-layout-header:before{content:"\F6FB"}.mdi-page-layout-header-footer:before{content:"\FF9C"}.mdi-page-layout-sidebar-left:before{content:"\F6FC"}.mdi-page-layout-sidebar-right:before{content:"\F6FD"}.mdi-page-next:before{content:"\FB8C"}.mdi-page-next-outline:before{content:"\FB8D"}.mdi-page-previous:before{content:"\FB8E"}.mdi-page-previous-outline:before{content:"\FB8F"}.mdi-palette:before{content:"\F3D8"}.mdi-palette-advanced:before{content:"\F3D9"}.mdi-palette-outline:before{content:"\FE6C"}.mdi-palette-swatch:before{content:"\F8B4"}.mdi-palm-tree:before{content:"\F0077"}.mdi-pan:before{content:"\FB90"}.mdi-pan-bottom-left:before{content:"\FB91"}.mdi-pan-bottom-right:before{content:"\FB92"}.mdi-pan-down:before{content:"\FB93"}.mdi-pan-horizontal:before{content:"\FB94"}.mdi-pan-left:before{content:"\FB95"}.mdi-pan-right:before{content:"\FB96"}.mdi-pan-top-left:before{content:"\FB97"}.mdi-pan-top-right:before{content:"\FB98"}.mdi-pan-up:before{content:"\FB99"}.mdi-pan-vertical:before{content:"\FB9A"}.mdi-panda:before{content:"\F3DA"}.mdi-pandora:before{content:"\F3DB"}.mdi-panorama:before{content:"\F3DC"}.mdi-panorama-fisheye:before{content:"\F3DD"}.mdi-panorama-horizontal:before{content:"\F3DE"}.mdi-panorama-vertical:before{content:"\F3DF"}.mdi-panorama-wide-angle:before{content:"\F3E0"}.mdi-paper-cut-vertical:before{content:"\F3E1"}.mdi-paper-roll:before{content:"\F0182"}.mdi-paper-roll-outline:before{content:"\F0183"}.mdi-paperclip:before{content:"\F3E2"}.mdi-parachute:before{content:"\FC90"}.mdi-parachute-outline:before{content:"\FC91"}.mdi-parking:before{content:"\F3E3"}.mdi-party-popper:before{content:"\F0078"}.mdi-passport:before{content:"\F7E2"}.mdi-passport-biometric:before{content:"\FDBD"}.mdi-pasta:before{content:"\F018B"}.mdi-patio-heater:before{content:"\FF9D"}.mdi-patreon:before{content:"\F881"}.mdi-pause:before{content:"\F3E4"}.mdi-pause-circle:before{content:"\F3E5"}.mdi-pause-circle-outline:before{content:"\F3E6"}.mdi-pause-octagon:before{content:"\F3E7"}.mdi-pause-octagon-outline:before{content:"\F3E8"}.mdi-paw:before{content:"\F3E9"}.mdi-paw-off:before{content:"\F657"}.mdi-paypal:before{content:"\F882"}.mdi-pdf-box:before{content:"\FE39"}.mdi-peace:before{content:"\F883"}.mdi-peanut:before{content:"\F001E"}.mdi-peanut-off:before{content:"\F001F"}.mdi-peanut-off-outline:before{content:"\F0021"}.mdi-peanut-outline:before{content:"\F0020"}.mdi-pen:before{content:"\F3EA"}.mdi-pen-lock:before{content:"\FDBE"}.mdi-pen-minus:before{content:"\FDBF"}.mdi-pen-off:before{content:"\FDC0"}.mdi-pen-plus:before{content:"\FDC1"}.mdi-pen-remove:before{content:"\FDC2"}.mdi-pencil:before{content:"\F3EB"}.mdi-pencil-box:before{content:"\F3EC"}.mdi-pencil-box-multiple:before{content:"\F016F"}.mdi-pencil-box-multiple-outline:before{content:"\F0170"}.mdi-pencil-box-outline:before{content:"\F3ED"}.mdi-pencil-circle:before{content:"\F6FE"}.mdi-pencil-circle-outline:before{content:"\F775"}.mdi-pencil-lock:before{content:"\F3EE"}.mdi-pencil-lock-outline:before{content:"\FDC3"}.mdi-pencil-minus:before{content:"\FDC4"}.mdi-pencil-minus-outline:before{content:"\FDC5"}.mdi-pencil-off:before{content:"\F3EF"}.mdi-pencil-off-outline:before{content:"\FDC6"}.mdi-pencil-outline:before{content:"\FC92"}.mdi-pencil-plus:before{content:"\FDC7"}.mdi-pencil-plus-outline:before{content:"\FDC8"}.mdi-pencil-remove:before{content:"\FDC9"}.mdi-pencil-remove-outline:before{content:"\FDCA"}.mdi-penguin:before{content:"\FEDD"}.mdi-pentagon:before{content:"\F6FF"}.mdi-pentagon-outline:before{content:"\F700"}.mdi-percent:before{content:"\F3F0"}.mdi-percent-outline:before{content:"\F02A3"}.mdi-periodic-table:before{content:"\F8B5"}.mdi-periodic-table-co2:before{content:"\F7E3"}.mdi-periscope:before{content:"\F747"}.mdi-perspective-less:before{content:"\FCFF"}.mdi-perspective-more:before{content:"\FD00"}.mdi-pharmacy:before{content:"\F3F1"}.mdi-phone:before{content:"\F3F2"}.mdi-phone-alert:before{content:"\FF37"}.mdi-phone-alert-outline:before{content:"\F01B9"}.mdi-phone-bluetooth:before{content:"\F3F3"}.mdi-phone-bluetooth-outline:before{content:"\F01BA"}.mdi-phone-cancel:before{content:"\F00E7"}.mdi-phone-cancel-outline:before{content:"\F01BB"}.mdi-phone-check:before{content:"\F01D4"}.mdi-phone-check-outline:before{content:"\F01D5"}.mdi-phone-classic:before{content:"\F602"}.mdi-phone-classic-off:before{content:"\F02A4"}.mdi-phone-forward:before{content:"\F3F4"}.mdi-phone-forward-outline:before{content:"\F01BC"}.mdi-phone-hangup:before{content:"\F3F5"}.mdi-phone-hangup-outline:before{content:"\F01BD"}.mdi-phone-in-talk:before{content:"\F3F6"}.mdi-phone-in-talk-outline:before{content:"\F01AD"}.mdi-phone-incoming:before{content:"\F3F7"}.mdi-phone-incoming-outline:before{content:"\F01BE"}.mdi-phone-lock:before{content:"\F3F8"}.mdi-phone-lock-outline:before{content:"\F01BF"}.mdi-phone-log:before{content:"\F3F9"}.mdi-phone-log-outline:before{content:"\F01C0"}.mdi-phone-message:before{content:"\F01C1"}.mdi-phone-message-outline:before{content:"\F01C2"}.mdi-phone-minus:before{content:"\F658"}.mdi-phone-minus-outline:before{content:"\F01C3"}.mdi-phone-missed:before{content:"\F3FA"}.mdi-phone-missed-outline:before{content:"\F01D0"}.mdi-phone-off:before{content:"\FDCB"}.mdi-phone-off-outline:before{content:"\F01D1"}.mdi-phone-outgoing:before{content:"\F3FB"}.mdi-phone-outgoing-outline:before{content:"\F01C4"}.mdi-phone-outline:before{content:"\FDCC"}.mdi-phone-paused:before{content:"\F3FC"}.mdi-phone-paused-outline:before{content:"\F01C5"}.mdi-phone-plus:before{content:"\F659"}.mdi-phone-plus-outline:before{content:"\F01C6"}.mdi-phone-return:before{content:"\F82E"}.mdi-phone-return-outline:before{content:"\F01C7"}.mdi-phone-ring:before{content:"\F01D6"}.mdi-phone-ring-outline:before{content:"\F01D7"}.mdi-phone-rotate-landscape:before{content:"\F884"}.mdi-phone-rotate-portrait:before{content:"\F885"}.mdi-phone-settings:before{content:"\F3FD"}.mdi-phone-settings-outline:before{content:"\F01C8"}.mdi-phone-voip:before{content:"\F3FE"}.mdi-pi:before{content:"\F3FF"}.mdi-pi-box:before{content:"\F400"}.mdi-pi-hole:before{content:"\FDCD"}.mdi-piano:before{content:"\F67C"}.mdi-pickaxe:before{content:"\F8B6"}.mdi-picture-in-picture-bottom-right:before{content:"\FE3A"}.mdi-picture-in-picture-bottom-right-outline:before{content:"\FE3B"}.mdi-picture-in-picture-top-right:before{content:"\FE3C"}.mdi-picture-in-picture-top-right-outline:before{content:"\FE3D"}.mdi-pier:before{content:"\F886"}.mdi-pier-crane:before{content:"\F887"}.mdi-pig:before{content:"\F401"}.mdi-pig-variant:before{content:"\F0028"}.mdi-piggy-bank:before{content:"\F0029"}.mdi-pill:before{content:"\F402"}.mdi-pillar:before{content:"\F701"}.mdi-pin:before{content:"\F403"}.mdi-pin-off:before{content:"\F404"}.mdi-pin-off-outline:before{content:"\F92F"}.mdi-pin-outline:before{content:"\F930"}.mdi-pine-tree:before{content:"\F405"}.mdi-pine-tree-box:before{content:"\F406"}.mdi-pinterest:before{content:"\F407"}.mdi-pinterest-box:before{content:"\F408"}.mdi-pinwheel:before{content:"\FAD4"}.mdi-pinwheel-outline:before{content:"\FAD5"}.mdi-pipe:before{content:"\F7E4"}.mdi-pipe-disconnected:before{content:"\F7E5"}.mdi-pipe-leak:before{content:"\F888"}.mdi-pirate:before{content:"\FA07"}.mdi-pistol:before{content:"\F702"}.mdi-piston:before{content:"\F889"}.mdi-pizza:before{content:"\F409"}.mdi-play:before{content:"\F40A"}.mdi-play-box:before{content:"\F02A5"}.mdi-play-box-outline:before{content:"\F40B"}.mdi-play-circle:before{content:"\F40C"}.mdi-play-circle-outline:before{content:"\F40D"}.mdi-play-network:before{content:"\F88A"}.mdi-play-network-outline:before{content:"\FC93"}.mdi-play-outline:before{content:"\FF38"}.mdi-play-pause:before{content:"\F40E"}.mdi-play-protected-content:before{content:"\F40F"}.mdi-play-speed:before{content:"\F8FE"}.mdi-playlist-check:before{content:"\F5C7"}.mdi-playlist-edit:before{content:"\F8FF"}.mdi-playlist-minus:before{content:"\F410"}.mdi-playlist-music:before{content:"\FC94"}.mdi-playlist-music-outline:before{content:"\FC95"}.mdi-playlist-play:before{content:"\F411"}.mdi-playlist-plus:before{content:"\F412"}.mdi-playlist-remove:before{content:"\F413"}.mdi-playlist-star:before{content:"\FDCE"}.mdi-playstation:before{content:"\F414"}.mdi-plex:before{content:"\F6B9"}.mdi-plus:before{content:"\F415"}.mdi-plus-box:before{content:"\F416"}.mdi-plus-box-multiple:before{content:"\F334"}.mdi-plus-box-multiple-outline:before{content:"\F016E"}.mdi-plus-box-outline:before{content:"\F703"}.mdi-plus-circle:before{content:"\F417"}.mdi-plus-circle-multiple-outline:before{content:"\F418"}.mdi-plus-circle-outline:before{content:"\F419"}.mdi-plus-minus:before{content:"\F991"}.mdi-plus-minus-box:before{content:"\F992"}.mdi-plus-network:before{content:"\F41A"}.mdi-plus-network-outline:before{content:"\FC96"}.mdi-plus-one:before{content:"\F41B"}.mdi-plus-outline:before{content:"\F704"}.mdi-plus-thick:before{content:"\F0217"}.mdi-pocket:before{content:"\F41C"}.mdi-podcast:before{content:"\F993"}.mdi-podium:before{content:"\FD01"}.mdi-podium-bronze:before{content:"\FD02"}.mdi-podium-gold:before{content:"\FD03"}.mdi-podium-silver:before{content:"\FD04"}.mdi-point-of-sale:before{content:"\FD6E"}.mdi-pokeball:before{content:"\F41D"}.mdi-pokemon-go:before{content:"\FA08"}.mdi-poker-chip:before{content:"\F82F"}.mdi-polaroid:before{content:"\F41E"}.mdi-police-badge:before{content:"\F0192"}.mdi-police-badge-outline:before{content:"\F0193"}.mdi-poll:before{content:"\F41F"}.mdi-poll-box:before{content:"\F420"}.mdi-poll-box-outline:before{content:"\F02A6"}.mdi-polymer:before{content:"\F421"}.mdi-pool:before{content:"\F606"}.mdi-popcorn:before{content:"\F422"}.mdi-post:before{content:"\F002A"}.mdi-post-outline:before{content:"\F002B"}.mdi-postage-stamp:before{content:"\FC97"}.mdi-pot:before{content:"\F65A"}.mdi-pot-mix:before{content:"\F65B"}.mdi-pound:before{content:"\F423"}.mdi-pound-box:before{content:"\F424"}.mdi-pound-box-outline:before{content:"\F01AA"}.mdi-power:before{content:"\F425"}.mdi-power-cycle:before{content:"\F900"}.mdi-power-off:before{content:"\F901"}.mdi-power-on:before{content:"\F902"}.mdi-power-plug:before{content:"\F6A4"}.mdi-power-plug-off:before{content:"\F6A5"}.mdi-power-settings:before{content:"\F426"}.mdi-power-sleep:before{content:"\F903"}.mdi-power-socket:before{content:"\F427"}.mdi-power-socket-au:before{content:"\F904"}.mdi-power-socket-de:before{content:"\F0132"}.mdi-power-socket-eu:before{content:"\F7E6"}.mdi-power-socket-fr:before{content:"\F0133"}.mdi-power-socket-jp:before{content:"\F0134"}.mdi-power-socket-uk:before{content:"\F7E7"}.mdi-power-socket-us:before{content:"\F7E8"}.mdi-power-standby:before{content:"\F905"}.mdi-powershell:before{content:"\FA09"}.mdi-prescription:before{content:"\F705"}.mdi-presentation:before{content:"\F428"}.mdi-presentation-play:before{content:"\F429"}.mdi-printer:before{content:"\F42A"}.mdi-printer-3d:before{content:"\F42B"}.mdi-printer-3d-nozzle:before{content:"\FE3E"}.mdi-printer-3d-nozzle-alert:before{content:"\F01EB"}.mdi-printer-3d-nozzle-alert-outline:before{content:"\F01EC"}.mdi-printer-3d-nozzle-outline:before{content:"\FE3F"}.mdi-printer-alert:before{content:"\F42C"}.mdi-printer-check:before{content:"\F0171"}.mdi-printer-off:before{content:"\FE40"}.mdi-printer-pos:before{content:"\F0079"}.mdi-printer-settings:before{content:"\F706"}.mdi-printer-wireless:before{content:"\FA0A"}.mdi-priority-high:before{content:"\F603"}.mdi-priority-low:before{content:"\F604"}.mdi-professional-hexagon:before{content:"\F42D"}.mdi-progress-alert:before{content:"\FC98"}.mdi-progress-check:before{content:"\F994"}.mdi-progress-clock:before{content:"\F995"}.mdi-progress-close:before{content:"\F0135"}.mdi-progress-download:before{content:"\F996"}.mdi-progress-upload:before{content:"\F997"}.mdi-progress-wrench:before{content:"\FC99"}.mdi-projector:before{content:"\F42E"}.mdi-projector-screen:before{content:"\F42F"}.mdi-protocol:before{content:"\FFF9"}.mdi-publish:before{content:"\F6A6"}.mdi-pulse:before{content:"\F430"}.mdi-pumpkin:before{content:"\FB9B"}.mdi-purse:before{content:"\FF39"}.mdi-purse-outline:before{content:"\FF3A"}.mdi-puzzle:before{content:"\F431"}.mdi-puzzle-outline:before{content:"\FA65"}.mdi-qi:before{content:"\F998"}.mdi-qqchat:before{content:"\F605"}.mdi-qrcode:before{content:"\F432"}.mdi-qrcode-edit:before{content:"\F8B7"}.mdi-qrcode-minus:before{content:"\F01B7"}.mdi-qrcode-plus:before{content:"\F01B6"}.mdi-qrcode-remove:before{content:"\F01B8"}.mdi-qrcode-scan:before{content:"\F433"}.mdi-quadcopter:before{content:"\F434"}.mdi-quality-high:before{content:"\F435"}.mdi-quality-low:before{content:"\FA0B"}.mdi-quality-medium:before{content:"\FA0C"}.mdi-quicktime:before{content:"\F436"}.mdi-quora:before{content:"\FD05"}.mdi-rabbit:before{content:"\F906"}.mdi-racing-helmet:before{content:"\FD6F"}.mdi-racquetball:before{content:"\FD70"}.mdi-radar:before{content:"\F437"}.mdi-radiator:before{content:"\F438"}.mdi-radiator-disabled:before{content:"\FAD6"}.mdi-radiator-off:before{content:"\FAD7"}.mdi-radio:before{content:"\F439"}.mdi-radio-am:before{content:"\FC9A"}.mdi-radio-fm:before{content:"\FC9B"}.mdi-radio-handheld:before{content:"\F43A"}.mdi-radio-off:before{content:"\F0247"}.mdi-radio-tower:before{content:"\F43B"}.mdi-radioactive:before{content:"\F43C"}.mdi-radioactive-off:before{content:"\FEDE"}.mdi-radiobox-blank:before{content:"\F43D"}.mdi-radiobox-marked:before{content:"\F43E"}.mdi-radius:before{content:"\FC9C"}.mdi-radius-outline:before{content:"\FC9D"}.mdi-railroad-light:before{content:"\FF3B"}.mdi-raspberry-pi:before{content:"\F43F"}.mdi-ray-end:before{content:"\F440"}.mdi-ray-end-arrow:before{content:"\F441"}.mdi-ray-start:before{content:"\F442"}.mdi-ray-start-arrow:before{content:"\F443"}.mdi-ray-start-end:before{content:"\F444"}.mdi-ray-vertex:before{content:"\F445"}.mdi-react:before{content:"\F707"}.mdi-read:before{content:"\F447"}.mdi-receipt:before{content:"\F449"}.mdi-record:before{content:"\F44A"}.mdi-record-circle:before{content:"\FEDF"}.mdi-record-circle-outline:before{content:"\FEE0"}.mdi-record-player:before{content:"\F999"}.mdi-record-rec:before{content:"\F44B"}.mdi-rectangle:before{content:"\FE41"}.mdi-rectangle-outline:before{content:"\FE42"}.mdi-recycle:before{content:"\F44C"}.mdi-reddit:before{content:"\F44D"}.mdi-redhat:before{content:"\F0146"}.mdi-redo:before{content:"\F44E"}.mdi-redo-variant:before{content:"\F44F"}.mdi-reflect-horizontal:before{content:"\FA0D"}.mdi-reflect-vertical:before{content:"\FA0E"}.mdi-refresh:before{content:"\F450"}.mdi-regex:before{content:"\F451"}.mdi-registered-trademark:before{content:"\FA66"}.mdi-relative-scale:before{content:"\F452"}.mdi-reload:before{content:"\F453"}.mdi-reload-alert:before{content:"\F0136"}.mdi-reminder:before{content:"\F88B"}.mdi-remote:before{content:"\F454"}.mdi-remote-desktop:before{content:"\F8B8"}.mdi-remote-off:before{content:"\FEE1"}.mdi-remote-tv:before{content:"\FEE2"}.mdi-remote-tv-off:before{content:"\FEE3"}.mdi-rename-box:before{content:"\F455"}.mdi-reorder-horizontal:before{content:"\F687"}.mdi-reorder-vertical:before{content:"\F688"}.mdi-repeat:before{content:"\F456"}.mdi-repeat-off:before{content:"\F457"}.mdi-repeat-once:before{content:"\F458"}.mdi-replay:before{content:"\F459"}.mdi-reply:before{content:"\F45A"}.mdi-reply-all:before{content:"\F45B"}.mdi-reply-all-outline:before{content:"\FF3C"}.mdi-reply-circle:before{content:"\F01D9"}.mdi-reply-outline:before{content:"\FF3D"}.mdi-reproduction:before{content:"\F45C"}.mdi-resistor:before{content:"\FB1F"}.mdi-resistor-nodes:before{content:"\FB20"}.mdi-resize:before{content:"\FA67"}.mdi-resize-bottom-right:before{content:"\F45D"}.mdi-responsive:before{content:"\F45E"}.mdi-restart:before{content:"\F708"}.mdi-restart-alert:before{content:"\F0137"}.mdi-restart-off:before{content:"\FD71"}.mdi-restore:before{content:"\F99A"}.mdi-restore-alert:before{content:"\F0138"}.mdi-rewind:before{content:"\F45F"}.mdi-rewind-10:before{content:"\FD06"}.mdi-rewind-30:before{content:"\FD72"}.mdi-rewind-5:before{content:"\F0224"}.mdi-rewind-outline:before{content:"\F709"}.mdi-rhombus:before{content:"\F70A"}.mdi-rhombus-medium:before{content:"\FA0F"}.mdi-rhombus-outline:before{content:"\F70B"}.mdi-rhombus-split:before{content:"\FA10"}.mdi-ribbon:before{content:"\F460"}.mdi-rice:before{content:"\F7E9"}.mdi-ring:before{content:"\F7EA"}.mdi-rivet:before{content:"\FE43"}.mdi-road:before{content:"\F461"}.mdi-road-variant:before{content:"\F462"}.mdi-robber:before{content:"\F007A"}.mdi-robot:before{content:"\F6A8"}.mdi-robot-industrial:before{content:"\FB21"}.mdi-robot-mower:before{content:"\F0222"}.mdi-robot-mower-outline:before{content:"\F021E"}.mdi-robot-vacuum:before{content:"\F70C"}.mdi-robot-vacuum-variant:before{content:"\F907"}.mdi-rocket:before{content:"\F463"}.mdi-roller-skate:before{content:"\FD07"}.mdi-rollerblade:before{content:"\FD08"}.mdi-rollupjs:before{content:"\FB9C"}.mdi-roman-numeral-1:before{content:"\F00B3"}.mdi-roman-numeral-10:before{content:"\F00BC"}.mdi-roman-numeral-2:before{content:"\F00B4"}.mdi-roman-numeral-3:before{content:"\F00B5"}.mdi-roman-numeral-4:before{content:"\F00B6"}.mdi-roman-numeral-5:before{content:"\F00B7"}.mdi-roman-numeral-6:before{content:"\F00B8"}.mdi-roman-numeral-7:before{content:"\F00B9"}.mdi-roman-numeral-8:before{content:"\F00BA"}.mdi-roman-numeral-9:before{content:"\F00BB"}.mdi-room-service:before{content:"\F88C"}.mdi-room-service-outline:before{content:"\FD73"}.mdi-rotate-3d:before{content:"\FEE4"}.mdi-rotate-3d-variant:before{content:"\F464"}.mdi-rotate-left:before{content:"\F465"}.mdi-rotate-left-variant:before{content:"\F466"}.mdi-rotate-orbit:before{content:"\FD74"}.mdi-rotate-right:before{content:"\F467"}.mdi-rotate-right-variant:before{content:"\F468"}.mdi-rounded-corner:before{content:"\F607"}.mdi-router:before{content:"\F020D"}.mdi-router-wireless:before{content:"\F469"}.mdi-router-wireless-settings:before{content:"\FA68"}.mdi-routes:before{content:"\F46A"}.mdi-routes-clock:before{content:"\F007B"}.mdi-rowing:before{content:"\F608"}.mdi-rss:before{content:"\F46B"}.mdi-rss-box:before{content:"\F46C"}.mdi-rss-off:before{content:"\FF3E"}.mdi-ruby:before{content:"\FD09"}.mdi-rugby:before{content:"\FD75"}.mdi-ruler:before{content:"\F46D"}.mdi-ruler-square:before{content:"\FC9E"}.mdi-ruler-square-compass:before{content:"\FEDB"}.mdi-run:before{content:"\F70D"}.mdi-run-fast:before{content:"\F46E"}.mdi-rv-truck:before{content:"\F01FF"}.mdi-sack:before{content:"\FD0A"}.mdi-sack-percent:before{content:"\FD0B"}.mdi-safe:before{content:"\FA69"}.mdi-safe-square:before{content:"\F02A7"}.mdi-safe-square-outline:before{content:"\F02A8"}.mdi-safety-goggles:before{content:"\FD0C"}.mdi-sailing:before{content:"\FEE5"}.mdi-sale:before{content:"\F46F"}.mdi-salesforce:before{content:"\F88D"}.mdi-sass:before{content:"\F7EB"}.mdi-satellite:before{content:"\F470"}.mdi-satellite-uplink:before{content:"\F908"}.mdi-satellite-variant:before{content:"\F471"}.mdi-sausage:before{content:"\F8B9"}.mdi-saw-blade:before{content:"\FE44"}.mdi-saxophone:before{content:"\F609"}.mdi-scale:before{content:"\F472"}.mdi-scale-balance:before{content:"\F5D1"}.mdi-scale-bathroom:before{content:"\F473"}.mdi-scale-off:before{content:"\F007C"}.mdi-scanner:before{content:"\F6AA"}.mdi-scanner-off:before{content:"\F909"}.mdi-scatter-plot:before{content:"\FEE6"}.mdi-scatter-plot-outline:before{content:"\FEE7"}.mdi-school:before{content:"\F474"}.mdi-school-outline:before{content:"\F01AB"}.mdi-scissors-cutting:before{content:"\FA6A"}.mdi-scooter:before{content:"\F0214"}.mdi-scoreboard:before{content:"\F02A9"}.mdi-scoreboard-outline:before{content:"\F02AA"}.mdi-screen-rotation:before{content:"\F475"}.mdi-screen-rotation-lock:before{content:"\F476"}.mdi-screw-flat-top:before{content:"\FDCF"}.mdi-screw-lag:before{content:"\FE54"}.mdi-screw-machine-flat-top:before{content:"\FE55"}.mdi-screw-machine-round-top:before{content:"\FE56"}.mdi-screw-round-top:before{content:"\FE57"}.mdi-screwdriver:before{content:"\F477"}.mdi-script:before{content:"\FB9D"}.mdi-script-outline:before{content:"\F478"}.mdi-script-text:before{content:"\FB9E"}.mdi-script-text-outline:before{content:"\FB9F"}.mdi-sd:before{content:"\F479"}.mdi-seal:before{content:"\F47A"}.mdi-seal-variant:before{content:"\FFFA"}.mdi-search-web:before{content:"\F70E"}.mdi-seat:before{content:"\FC9F"}.mdi-seat-flat:before{content:"\F47B"}.mdi-seat-flat-angled:before{content:"\F47C"}.mdi-seat-individual-suite:before{content:"\F47D"}.mdi-seat-legroom-extra:before{content:"\F47E"}.mdi-seat-legroom-normal:before{content:"\F47F"}.mdi-seat-legroom-reduced:before{content:"\F480"}.mdi-seat-outline:before{content:"\FCA0"}.mdi-seat-passenger:before{content:"\F0274"}.mdi-seat-recline-extra:before{content:"\F481"}.mdi-seat-recline-normal:before{content:"\F482"}.mdi-seatbelt:before{content:"\FCA1"}.mdi-security:before{content:"\F483"}.mdi-security-network:before{content:"\F484"}.mdi-seed:before{content:"\FE45"}.mdi-seed-outline:before{content:"\FE46"}.mdi-segment:before{content:"\FEE8"}.mdi-select:before{content:"\F485"}.mdi-select-all:before{content:"\F486"}.mdi-select-color:before{content:"\FD0D"}.mdi-select-compare:before{content:"\FAD8"}.mdi-select-drag:before{content:"\FA6B"}.mdi-select-group:before{content:"\FF9F"}.mdi-select-inverse:before{content:"\F487"}.mdi-select-marker:before{content:"\F02AB"}.mdi-select-multiple:before{content:"\F02AC"}.mdi-select-multiple-marker:before{content:"\F02AD"}.mdi-select-off:before{content:"\F488"}.mdi-select-place:before{content:"\FFFB"}.mdi-select-search:before{content:"\F022F"}.mdi-selection:before{content:"\F489"}.mdi-selection-drag:before{content:"\FA6C"}.mdi-selection-ellipse:before{content:"\FD0E"}.mdi-selection-ellipse-arrow-inside:before{content:"\FF3F"}.mdi-selection-marker:before{content:"\F02AE"}.mdi-selection-multiple-marker:before{content:"\F02AF"}.mdi-selection-mutliple:before{content:"\F02B0"}.mdi-selection-off:before{content:"\F776"}.mdi-selection-search:before{content:"\F0230"}.mdi-send:before{content:"\F48A"}.mdi-send-check:before{content:"\F018C"}.mdi-send-check-outline:before{content:"\F018D"}.mdi-send-circle:before{content:"\FE58"}.mdi-send-circle-outline:before{content:"\FE59"}.mdi-send-clock:before{content:"\F018E"}.mdi-send-clock-outline:before{content:"\F018F"}.mdi-send-lock:before{content:"\F7EC"}.mdi-send-lock-outline:before{content:"\F0191"}.mdi-send-outline:before{content:"\F0190"}.mdi-serial-port:before{content:"\F65C"}.mdi-server:before{content:"\F48B"}.mdi-server-minus:before{content:"\F48C"}.mdi-server-network:before{content:"\F48D"}.mdi-server-network-off:before{content:"\F48E"}.mdi-server-off:before{content:"\F48F"}.mdi-server-plus:before{content:"\F490"}.mdi-server-remove:before{content:"\F491"}.mdi-server-security:before{content:"\F492"}.mdi-set-all:before{content:"\F777"}.mdi-set-center:before{content:"\F778"}.mdi-set-center-right:before{content:"\F779"}.mdi-set-left:before{content:"\F77A"}.mdi-set-left-center:before{content:"\F77B"}.mdi-set-left-right:before{content:"\F77C"}.mdi-set-none:before{content:"\F77D"}.mdi-set-right:before{content:"\F77E"}.mdi-set-top-box:before{content:"\F99E"}.mdi-settings:before{content:"\F493"}.mdi-settings-box:before{content:"\F494"}.mdi-settings-helper:before{content:"\FA6D"}.mdi-settings-outline:before{content:"\F8BA"}.mdi-settings-transfer:before{content:"\F007D"}.mdi-settings-transfer-outline:before{content:"\F007E"}.mdi-shaker:before{content:"\F0139"}.mdi-shaker-outline:before{content:"\F013A"}.mdi-shape:before{content:"\F830"}.mdi-shape-circle-plus:before{content:"\F65D"}.mdi-shape-outline:before{content:"\F831"}.mdi-shape-oval-plus:before{content:"\F0225"}.mdi-shape-plus:before{content:"\F495"}.mdi-shape-polygon-plus:before{content:"\F65E"}.mdi-shape-rectangle-plus:before{content:"\F65F"}.mdi-shape-square-plus:before{content:"\F660"}.mdi-share:before{content:"\F496"}.mdi-share-all:before{content:"\F021F"}.mdi-share-all-outline:before{content:"\F0220"}.mdi-share-circle:before{content:"\F01D8"}.mdi-share-off:before{content:"\FF40"}.mdi-share-off-outline:before{content:"\FF41"}.mdi-share-outline:before{content:"\F931"}.mdi-share-variant:before{content:"\F497"}.mdi-sheep:before{content:"\FCA2"}.mdi-shield:before{content:"\F498"}.mdi-shield-account:before{content:"\F88E"}.mdi-shield-account-outline:before{content:"\FA11"}.mdi-shield-airplane:before{content:"\F6BA"}.mdi-shield-airplane-outline:before{content:"\FCA3"}.mdi-shield-alert:before{content:"\FEE9"}.mdi-shield-alert-outline:before{content:"\FEEA"}.mdi-shield-car:before{content:"\FFA0"}.mdi-shield-check:before{content:"\F565"}.mdi-shield-check-outline:before{content:"\FCA4"}.mdi-shield-cross:before{content:"\FCA5"}.mdi-shield-cross-outline:before{content:"\FCA6"}.mdi-shield-edit:before{content:"\F01CB"}.mdi-shield-edit-outline:before{content:"\F01CC"}.mdi-shield-half-full:before{content:"\F77F"}.mdi-shield-home:before{content:"\F689"}.mdi-shield-home-outline:before{content:"\FCA7"}.mdi-shield-key:before{content:"\FBA0"}.mdi-shield-key-outline:before{content:"\FBA1"}.mdi-shield-link-variant:before{content:"\FD0F"}.mdi-shield-link-variant-outline:before{content:"\FD10"}.mdi-shield-lock:before{content:"\F99C"}.mdi-shield-lock-outline:before{content:"\FCA8"}.mdi-shield-off:before{content:"\F99D"}.mdi-shield-off-outline:before{content:"\F99B"}.mdi-shield-outline:before{content:"\F499"}.mdi-shield-plus:before{content:"\FAD9"}.mdi-shield-plus-outline:before{content:"\FADA"}.mdi-shield-refresh:before{content:"\F01CD"}.mdi-shield-refresh-outline:before{content:"\F01CE"}.mdi-shield-remove:before{content:"\FADB"}.mdi-shield-remove-outline:before{content:"\FADC"}.mdi-shield-search:before{content:"\FD76"}.mdi-shield-star:before{content:"\F0166"}.mdi-shield-star-outline:before{content:"\F0167"}.mdi-shield-sun:before{content:"\F007F"}.mdi-shield-sun-outline:before{content:"\F0080"}.mdi-ship-wheel:before{content:"\F832"}.mdi-shoe-formal:before{content:"\FB22"}.mdi-shoe-heel:before{content:"\FB23"}.mdi-shoe-print:before{content:"\FE5A"}.mdi-shopify:before{content:"\FADD"}.mdi-shopping:before{content:"\F49A"}.mdi-shopping-music:before{content:"\F49B"}.mdi-shopping-outline:before{content:"\F0200"}.mdi-shopping-search:before{content:"\FFA1"}.mdi-shovel:before{content:"\F70F"}.mdi-shovel-off:before{content:"\F710"}.mdi-shower:before{content:"\F99F"}.mdi-shower-head:before{content:"\F9A0"}.mdi-shredder:before{content:"\F49C"}.mdi-shuffle:before{content:"\F49D"}.mdi-shuffle-disabled:before{content:"\F49E"}.mdi-shuffle-variant:before{content:"\F49F"}.mdi-sigma:before{content:"\F4A0"}.mdi-sigma-lower:before{content:"\F62B"}.mdi-sign-caution:before{content:"\F4A1"}.mdi-sign-direction:before{content:"\F780"}.mdi-sign-direction-minus:before{content:"\F0022"}.mdi-sign-direction-plus:before{content:"\FFFD"}.mdi-sign-direction-remove:before{content:"\FFFE"}.mdi-sign-real-estate:before{content:"\F0143"}.mdi-sign-text:before{content:"\F781"}.mdi-signal:before{content:"\F4A2"}.mdi-signal-2g:before{content:"\F711"}.mdi-signal-3g:before{content:"\F712"}.mdi-signal-4g:before{content:"\F713"}.mdi-signal-5g:before{content:"\FA6E"}.mdi-signal-cellular-1:before{content:"\F8BB"}.mdi-signal-cellular-2:before{content:"\F8BC"}.mdi-signal-cellular-3:before{content:"\F8BD"}.mdi-signal-cellular-outline:before{content:"\F8BE"}.mdi-signal-distance-variant:before{content:"\FE47"}.mdi-signal-hspa:before{content:"\F714"}.mdi-signal-hspa-plus:before{content:"\F715"}.mdi-signal-off:before{content:"\F782"}.mdi-signal-variant:before{content:"\F60A"}.mdi-signature:before{content:"\FE5B"}.mdi-signature-freehand:before{content:"\FE5C"}.mdi-signature-image:before{content:"\FE5D"}.mdi-signature-text:before{content:"\FE5E"}.mdi-silo:before{content:"\FB24"}.mdi-silverware:before{content:"\F4A3"}.mdi-silverware-clean:before{content:"\FFFF"}.mdi-silverware-fork:before{content:"\F4A4"}.mdi-silverware-fork-knife:before{content:"\FA6F"}.mdi-silverware-spoon:before{content:"\F4A5"}.mdi-silverware-variant:before{content:"\F4A6"}.mdi-sim:before{content:"\F4A7"}.mdi-sim-alert:before{content:"\F4A8"}.mdi-sim-off:before{content:"\F4A9"}.mdi-sina-weibo:before{content:"\FADE"}.mdi-sitemap:before{content:"\F4AA"}.mdi-skate:before{content:"\FD11"}.mdi-skew-less:before{content:"\FD12"}.mdi-skew-more:before{content:"\FD13"}.mdi-skip-backward:before{content:"\F4AB"}.mdi-skip-backward-outline:before{content:"\FF42"}.mdi-skip-forward:before{content:"\F4AC"}.mdi-skip-forward-outline:before{content:"\FF43"}.mdi-skip-next:before{content:"\F4AD"}.mdi-skip-next-circle:before{content:"\F661"}.mdi-skip-next-circle-outline:before{content:"\F662"}.mdi-skip-next-outline:before{content:"\FF44"}.mdi-skip-previous:before{content:"\F4AE"}.mdi-skip-previous-circle:before{content:"\F663"}.mdi-skip-previous-circle-outline:before{content:"\F664"}.mdi-skip-previous-outline:before{content:"\FF45"}.mdi-skull:before{content:"\F68B"}.mdi-skull-crossbones:before{content:"\FBA2"}.mdi-skull-crossbones-outline:before{content:"\FBA3"}.mdi-skull-outline:before{content:"\FBA4"}.mdi-skype:before{content:"\F4AF"}.mdi-skype-business:before{content:"\F4B0"}.mdi-slack:before{content:"\F4B1"}.mdi-slackware:before{content:"\F90A"}.mdi-slash-forward:before{content:"\F0000"}.mdi-slash-forward-box:before{content:"\F0001"}.mdi-sleep:before{content:"\F4B2"}.mdi-sleep-off:before{content:"\F4B3"}.mdi-slope-downhill:before{content:"\FE5F"}.mdi-slope-uphill:before{content:"\FE60"}.mdi-slot-machine:before{content:"\F013F"}.mdi-slot-machine-outline:before{content:"\F0140"}.mdi-smart-card:before{content:"\F00E8"}.mdi-smart-card-outline:before{content:"\F00E9"}.mdi-smart-card-reader:before{content:"\F00EA"}.mdi-smart-card-reader-outline:before{content:"\F00EB"}.mdi-smog:before{content:"\FA70"}.mdi-smoke-detector:before{content:"\F392"}.mdi-smoking:before{content:"\F4B4"}.mdi-smoking-off:before{content:"\F4B5"}.mdi-snapchat:before{content:"\F4B6"}.mdi-snowflake:before{content:"\F716"}.mdi-snowflake-alert:before{content:"\FF46"}.mdi-snowflake-variant:before{content:"\FF47"}.mdi-snowman:before{content:"\F4B7"}.mdi-soccer:before{content:"\F4B8"}.mdi-soccer-field:before{content:"\F833"}.mdi-sofa:before{content:"\F4B9"}.mdi-solar-panel:before{content:"\FD77"}.mdi-solar-panel-large:before{content:"\FD78"}.mdi-solar-power:before{content:"\FA71"}.mdi-soldering-iron:before{content:"\F00BD"}.mdi-solid:before{content:"\F68C"}.mdi-sort:before{content:"\F4BA"}.mdi-sort-alphabetical:before{content:"\F4BB"}.mdi-sort-alphabetical-ascending:before{content:"\F0173"}.mdi-sort-alphabetical-descending:before{content:"\F0174"}.mdi-sort-ascending:before{content:"\F4BC"}.mdi-sort-descending:before{content:"\F4BD"}.mdi-sort-numeric:before{content:"\F4BE"}.mdi-sort-variant:before{content:"\F4BF"}.mdi-sort-variant-lock:before{content:"\FCA9"}.mdi-sort-variant-lock-open:before{content:"\FCAA"}.mdi-sort-variant-remove:before{content:"\F0172"}.mdi-soundcloud:before{content:"\F4C0"}.mdi-source-branch:before{content:"\F62C"}.mdi-source-commit:before{content:"\F717"}.mdi-source-commit-end:before{content:"\F718"}.mdi-source-commit-end-local:before{content:"\F719"}.mdi-source-commit-local:before{content:"\F71A"}.mdi-source-commit-next-local:before{content:"\F71B"}.mdi-source-commit-start:before{content:"\F71C"}.mdi-source-commit-start-next-local:before{content:"\F71D"}.mdi-source-fork:before{content:"\F4C1"}.mdi-source-merge:before{content:"\F62D"}.mdi-source-pull:before{content:"\F4C2"}.mdi-source-repository:before{content:"\FCAB"}.mdi-source-repository-multiple:before{content:"\FCAC"}.mdi-soy-sauce:before{content:"\F7ED"}.mdi-spa:before{content:"\FCAD"}.mdi-spa-outline:before{content:"\FCAE"}.mdi-space-invaders:before{content:"\FBA5"}.mdi-spade:before{content:"\FE48"}.mdi-speaker:before{content:"\F4C3"}.mdi-speaker-bluetooth:before{content:"\F9A1"}.mdi-speaker-multiple:before{content:"\FD14"}.mdi-speaker-off:before{content:"\F4C4"}.mdi-speaker-wireless:before{content:"\F71E"}.mdi-speedometer:before{content:"\F4C5"}.mdi-speedometer-medium:before{content:"\FFA2"}.mdi-speedometer-slow:before{content:"\FFA3"}.mdi-spellcheck:before{content:"\F4C6"}.mdi-spider:before{content:"\F0215"}.mdi-spider-thread:before{content:"\F0216"}.mdi-spider-web:before{content:"\FBA6"}.mdi-spotify:before{content:"\F4C7"}.mdi-spotlight:before{content:"\F4C8"}.mdi-spotlight-beam:before{content:"\F4C9"}.mdi-spray:before{content:"\F665"}.mdi-spray-bottle:before{content:"\FADF"}.mdi-sprinkler:before{content:"\F0081"}.mdi-sprinkler-variant:before{content:"\F0082"}.mdi-sprout:before{content:"\FE49"}.mdi-sprout-outline:before{content:"\FE4A"}.mdi-square:before{content:"\F763"}.mdi-square-edit-outline:before{content:"\F90B"}.mdi-square-inc:before{content:"\F4CA"}.mdi-square-inc-cash:before{content:"\F4CB"}.mdi-square-medium:before{content:"\FA12"}.mdi-square-medium-outline:before{content:"\FA13"}.mdi-square-outline:before{content:"\F762"}.mdi-square-root:before{content:"\F783"}.mdi-square-root-box:before{content:"\F9A2"}.mdi-square-small:before{content:"\FA14"}.mdi-squeegee:before{content:"\FAE0"}.mdi-ssh:before{content:"\F8BF"}.mdi-stack-exchange:before{content:"\F60B"}.mdi-stack-overflow:before{content:"\F4CC"}.mdi-stadium:before{content:"\F001A"}.mdi-stadium-variant:before{content:"\F71F"}.mdi-stairs:before{content:"\F4CD"}.mdi-stamper:before{content:"\FD15"}.mdi-standard-definition:before{content:"\F7EE"}.mdi-star:before{content:"\F4CE"}.mdi-star-box:before{content:"\FA72"}.mdi-star-box-multiple:before{content:"\F02B1"}.mdi-star-box-multiple-outline:before{content:"\F02B2"}.mdi-star-box-outline:before{content:"\FA73"}.mdi-star-circle:before{content:"\F4CF"}.mdi-star-circle-outline:before{content:"\F9A3"}.mdi-star-face:before{content:"\F9A4"}.mdi-star-four-points:before{content:"\FAE1"}.mdi-star-four-points-outline:before{content:"\FAE2"}.mdi-star-half:before{content:"\F4D0"}.mdi-star-off:before{content:"\F4D1"}.mdi-star-outline:before{content:"\F4D2"}.mdi-star-three-points:before{content:"\FAE3"}.mdi-star-three-points-outline:before{content:"\FAE4"}.mdi-state-machine:before{content:"\F021A"}.mdi-steam:before{content:"\F4D3"}.mdi-steam-box:before{content:"\F90C"}.mdi-steering:before{content:"\F4D4"}.mdi-steering-off:before{content:"\F90D"}.mdi-step-backward:before{content:"\F4D5"}.mdi-step-backward-2:before{content:"\F4D6"}.mdi-step-forward:before{content:"\F4D7"}.mdi-step-forward-2:before{content:"\F4D8"}.mdi-stethoscope:before{content:"\F4D9"}.mdi-sticker:before{content:"\F5D0"}.mdi-sticker-emoji:before{content:"\F784"}.mdi-stocking:before{content:"\F4DA"}.mdi-stomach:before{content:"\F00BE"}.mdi-stop:before{content:"\F4DB"}.mdi-stop-circle:before{content:"\F666"}.mdi-stop-circle-outline:before{content:"\F667"}.mdi-store:before{content:"\F4DC"}.mdi-store-24-hour:before{content:"\F4DD"}.mdi-storefront:before{content:"\F00EC"}.mdi-stove:before{content:"\F4DE"}.mdi-strategy:before{content:"\F0201"}.mdi-strava:before{content:"\FB25"}.mdi-stretch-to-page:before{content:"\FF48"}.mdi-stretch-to-page-outline:before{content:"\FF49"}.mdi-string-lights:before{content:"\F02E5"}.mdi-string-lights-off:before{content:"\F02E6"}.mdi-subdirectory-arrow-left:before{content:"\F60C"}.mdi-subdirectory-arrow-right:before{content:"\F60D"}.mdi-subtitles:before{content:"\FA15"}.mdi-subtitles-outline:before{content:"\FA16"}.mdi-subway:before{content:"\F6AB"}.mdi-subway-alert-variant:before{content:"\FD79"}.mdi-subway-variant:before{content:"\F4DF"}.mdi-summit:before{content:"\F785"}.mdi-sunglasses:before{content:"\F4E0"}.mdi-surround-sound:before{content:"\F5C5"}.mdi-surround-sound-2-0:before{content:"\F7EF"}.mdi-surround-sound-3-1:before{content:"\F7F0"}.mdi-surround-sound-5-1:before{content:"\F7F1"}.mdi-surround-sound-7-1:before{content:"\F7F2"}.mdi-svg:before{content:"\F720"}.mdi-swap-horizontal:before{content:"\F4E1"}.mdi-swap-horizontal-bold:before{content:"\FBA9"}.mdi-swap-horizontal-circle:before{content:"\F0002"}.mdi-swap-horizontal-circle-outline:before{content:"\F0003"}.mdi-swap-horizontal-variant:before{content:"\F8C0"}.mdi-swap-vertical:before{content:"\F4E2"}.mdi-swap-vertical-bold:before{content:"\FBAA"}.mdi-swap-vertical-circle:before{content:"\F0004"}.mdi-swap-vertical-circle-outline:before{content:"\F0005"}.mdi-swap-vertical-variant:before{content:"\F8C1"}.mdi-swim:before{content:"\F4E3"}.mdi-switch:before{content:"\F4E4"}.mdi-sword:before{content:"\F4E5"}.mdi-sword-cross:before{content:"\F786"}.mdi-symfony:before{content:"\FAE5"}.mdi-sync:before{content:"\F4E6"}.mdi-sync-alert:before{content:"\F4E7"}.mdi-sync-off:before{content:"\F4E8"}.mdi-tab:before{content:"\F4E9"}.mdi-tab-minus:before{content:"\FB26"}.mdi-tab-plus:before{content:"\F75B"}.mdi-tab-remove:before{content:"\FB27"}.mdi-tab-unselected:before{content:"\F4EA"}.mdi-table:before{content:"\F4EB"}.mdi-table-border:before{content:"\FA17"}.mdi-table-chair:before{content:"\F0083"}.mdi-table-column:before{content:"\F834"}.mdi-table-column-plus-after:before{content:"\F4EC"}.mdi-table-column-plus-before:before{content:"\F4ED"}.mdi-table-column-remove:before{content:"\F4EE"}.mdi-table-column-width:before{content:"\F4EF"}.mdi-table-edit:before{content:"\F4F0"}.mdi-table-eye:before{content:"\F00BF"}.mdi-table-headers-eye:before{content:"\F0248"}.mdi-table-headers-eye-off:before{content:"\F0249"}.mdi-table-large:before{content:"\F4F1"}.mdi-table-large-plus:before{content:"\FFA4"}.mdi-table-large-remove:before{content:"\FFA5"}.mdi-table-merge-cells:before{content:"\F9A5"}.mdi-table-of-contents:before{content:"\F835"}.mdi-table-plus:before{content:"\FA74"}.mdi-table-remove:before{content:"\FA75"}.mdi-table-row:before{content:"\F836"}.mdi-table-row-height:before{content:"\F4F2"}.mdi-table-row-plus-after:before{content:"\F4F3"}.mdi-table-row-plus-before:before{content:"\F4F4"}.mdi-table-row-remove:before{content:"\F4F5"}.mdi-table-search:before{content:"\F90E"}.mdi-table-settings:before{content:"\F837"}.mdi-table-tennis:before{content:"\FE4B"}.mdi-tablet:before{content:"\F4F6"}.mdi-tablet-android:before{content:"\F4F7"}.mdi-tablet-cellphone:before{content:"\F9A6"}.mdi-tablet-dashboard:before{content:"\FEEB"}.mdi-tablet-ipad:before{content:"\F4F8"}.mdi-taco:before{content:"\F761"}.mdi-tag:before{content:"\F4F9"}.mdi-tag-faces:before{content:"\F4FA"}.mdi-tag-heart:before{content:"\F68A"}.mdi-tag-heart-outline:before{content:"\FBAB"}.mdi-tag-minus:before{content:"\F90F"}.mdi-tag-minus-outline:before{content:"\F024A"}.mdi-tag-multiple:before{content:"\F4FB"}.mdi-tag-off:before{content:"\F024B"}.mdi-tag-off-outline:before{content:"\F024C"}.mdi-tag-outline:before{content:"\F4FC"}.mdi-tag-plus:before{content:"\F721"}.mdi-tag-plus-outline:before{content:"\F024D"}.mdi-tag-remove:before{content:"\F722"}.mdi-tag-remove-outline:before{content:"\F024E"}.mdi-tag-text:before{content:"\F024F"}.mdi-tag-text-outline:before{content:"\F4FD"}.mdi-tank:before{content:"\FD16"}.mdi-tanker-truck:before{content:"\F0006"}.mdi-tape-measure:before{content:"\FB28"}.mdi-target:before{content:"\F4FE"}.mdi-target-account:before{content:"\FBAC"}.mdi-target-variant:before{content:"\FA76"}.mdi-taxi:before{content:"\F4FF"}.mdi-tea:before{content:"\FD7A"}.mdi-tea-outline:before{content:"\FD7B"}.mdi-teach:before{content:"\F88F"}.mdi-teamviewer:before{content:"\F500"}.mdi-telegram:before{content:"\F501"}.mdi-telescope:before{content:"\FB29"}.mdi-television:before{content:"\F502"}.mdi-television-box:before{content:"\F838"}.mdi-television-classic:before{content:"\F7F3"}.mdi-television-classic-off:before{content:"\F839"}.mdi-television-clean:before{content:"\F013B"}.mdi-television-guide:before{content:"\F503"}.mdi-television-off:before{content:"\F83A"}.mdi-television-pause:before{content:"\FFA6"}.mdi-television-play:before{content:"\FEEC"}.mdi-television-stop:before{content:"\FFA7"}.mdi-temperature-celsius:before{content:"\F504"}.mdi-temperature-fahrenheit:before{content:"\F505"}.mdi-temperature-kelvin:before{content:"\F506"}.mdi-tennis:before{content:"\FD7C"}.mdi-tennis-ball:before{content:"\F507"}.mdi-tent:before{content:"\F508"}.mdi-terraform:before{content:"\F0084"}.mdi-terrain:before{content:"\F509"}.mdi-test-tube:before{content:"\F668"}.mdi-test-tube-empty:before{content:"\F910"}.mdi-test-tube-off:before{content:"\F911"}.mdi-text:before{content:"\F9A7"}.mdi-text-recognition:before{content:"\F0168"}.mdi-text-shadow:before{content:"\F669"}.mdi-text-short:before{content:"\F9A8"}.mdi-text-subject:before{content:"\F9A9"}.mdi-text-to-speech:before{content:"\F50A"}.mdi-text-to-speech-off:before{content:"\F50B"}.mdi-textarea:before{content:"\F00C0"}.mdi-textbox:before{content:"\F60E"}.mdi-textbox-password:before{content:"\F7F4"}.mdi-texture:before{content:"\F50C"}.mdi-texture-box:before{content:"\F0007"}.mdi-theater:before{content:"\F50D"}.mdi-theme-light-dark:before{content:"\F50E"}.mdi-thermometer:before{content:"\F50F"}.mdi-thermometer-alert:before{content:"\FE61"}.mdi-thermometer-chevron-down:before{content:"\FE62"}.mdi-thermometer-chevron-up:before{content:"\FE63"}.mdi-thermometer-high:before{content:"\F00ED"}.mdi-thermometer-lines:before{content:"\F510"}.mdi-thermometer-low:before{content:"\F00EE"}.mdi-thermometer-minus:before{content:"\FE64"}.mdi-thermometer-plus:before{content:"\FE65"}.mdi-thermostat:before{content:"\F393"}.mdi-thermostat-box:before{content:"\F890"}.mdi-thought-bubble:before{content:"\F7F5"}.mdi-thought-bubble-outline:before{content:"\F7F6"}.mdi-thumb-down:before{content:"\F511"}.mdi-thumb-down-outline:before{content:"\F512"}.mdi-thumb-up:before{content:"\F513"}.mdi-thumb-up-outline:before{content:"\F514"}.mdi-thumbs-up-down:before{content:"\F515"}.mdi-ticket:before{content:"\F516"}.mdi-ticket-account:before{content:"\F517"}.mdi-ticket-confirmation:before{content:"\F518"}.mdi-ticket-outline:before{content:"\F912"}.mdi-ticket-percent:before{content:"\F723"}.mdi-tie:before{content:"\F519"}.mdi-tilde:before{content:"\F724"}.mdi-timelapse:before{content:"\F51A"}.mdi-timeline:before{content:"\FBAD"}.mdi-timeline-alert:before{content:"\FFB2"}.mdi-timeline-alert-outline:before{content:"\FFB5"}.mdi-timeline-clock:before{content:"\F0226"}.mdi-timeline-clock-outline:before{content:"\F0227"}.mdi-timeline-help:before{content:"\FFB6"}.mdi-timeline-help-outline:before{content:"\FFB7"}.mdi-timeline-outline:before{content:"\FBAE"}.mdi-timeline-plus:before{content:"\FFB3"}.mdi-timeline-plus-outline:before{content:"\FFB4"}.mdi-timeline-text:before{content:"\FBAF"}.mdi-timeline-text-outline:before{content:"\FBB0"}.mdi-timer:before{content:"\F51B"}.mdi-timer-10:before{content:"\F51C"}.mdi-timer-3:before{content:"\F51D"}.mdi-timer-off:before{content:"\F51E"}.mdi-timer-sand:before{content:"\F51F"}.mdi-timer-sand-empty:before{content:"\F6AC"}.mdi-timer-sand-full:before{content:"\F78B"}.mdi-timetable:before{content:"\F520"}.mdi-toaster:before{content:"\F0085"}.mdi-toaster-off:before{content:"\F01E2"}.mdi-toaster-oven:before{content:"\FCAF"}.mdi-toggle-switch:before{content:"\F521"}.mdi-toggle-switch-off:before{content:"\F522"}.mdi-toggle-switch-off-outline:before{content:"\FA18"}.mdi-toggle-switch-outline:before{content:"\FA19"}.mdi-toilet:before{content:"\F9AA"}.mdi-toolbox:before{content:"\F9AB"}.mdi-toolbox-outline:before{content:"\F9AC"}.mdi-tools:before{content:"\F0086"}.mdi-tooltip:before{content:"\F523"}.mdi-tooltip-account:before{content:"\F00C"}.mdi-tooltip-edit:before{content:"\F524"}.mdi-tooltip-image:before{content:"\F525"}.mdi-tooltip-image-outline:before{content:"\FBB1"}.mdi-tooltip-outline:before{content:"\F526"}.mdi-tooltip-plus:before{content:"\FBB2"}.mdi-tooltip-plus-outline:before{content:"\F527"}.mdi-tooltip-text:before{content:"\F528"}.mdi-tooltip-text-outline:before{content:"\FBB3"}.mdi-tooth:before{content:"\F8C2"}.mdi-tooth-outline:before{content:"\F529"}.mdi-toothbrush:before{content:"\F0154"}.mdi-toothbrush-electric:before{content:"\F0157"}.mdi-toothbrush-paste:before{content:"\F0155"}.mdi-tor:before{content:"\F52A"}.mdi-tortoise:before{content:"\FD17"}.mdi-toslink:before{content:"\F02E3"}.mdi-tournament:before{content:"\F9AD"}.mdi-tower-beach:before{content:"\F680"}.mdi-tower-fire:before{content:"\F681"}.mdi-towing:before{content:"\F83B"}.mdi-toy-brick:before{content:"\F02B3"}.mdi-toy-brick-marker:before{content:"\F02B4"}.mdi-toy-brick-marker-outline:before{content:"\F02B5"}.mdi-toy-brick-minus:before{content:"\F02B6"}.mdi-toy-brick-minus-outline:before{content:"\F02B7"}.mdi-toy-brick-outline:before{content:"\F02B8"}.mdi-toy-brick-plus:before{content:"\F02B9"}.mdi-toy-brick-plus-outline:before{content:"\F02BA"}.mdi-toy-brick-remove:before{content:"\F02BB"}.mdi-toy-brick-remove-outline:before{content:"\F02BC"}.mdi-toy-brick-search:before{content:"\F02BD"}.mdi-toy-brick-search-outline:before{content:"\F02BE"}.mdi-track-light:before{content:"\F913"}.mdi-trackpad:before{content:"\F7F7"}.mdi-trackpad-lock:before{content:"\F932"}.mdi-tractor:before{content:"\F891"}.mdi-trademark:before{content:"\FA77"}.mdi-traffic-light:before{content:"\F52B"}.mdi-train:before{content:"\F52C"}.mdi-train-car:before{content:"\FBB4"}.mdi-train-variant:before{content:"\F8C3"}.mdi-tram:before{content:"\F52D"}.mdi-tram-side:before{content:"\F0008"}.mdi-transcribe:before{content:"\F52E"}.mdi-transcribe-close:before{content:"\F52F"}.mdi-transfer:before{content:"\F0087"}.mdi-transfer-down:before{content:"\FD7D"}.mdi-transfer-left:before{content:"\FD7E"}.mdi-transfer-right:before{content:"\F530"}.mdi-transfer-up:before{content:"\FD7F"}.mdi-transit-connection:before{content:"\FD18"}.mdi-transit-connection-variant:before{content:"\FD19"}.mdi-transit-detour:before{content:"\FFA8"}.mdi-transit-transfer:before{content:"\F6AD"}.mdi-transition:before{content:"\F914"}.mdi-transition-masked:before{content:"\F915"}.mdi-translate:before{content:"\F5CA"}.mdi-translate-off:before{content:"\FE66"}.mdi-transmission-tower:before{content:"\FD1A"}.mdi-trash-can:before{content:"\FA78"}.mdi-trash-can-outline:before{content:"\FA79"}.mdi-tray:before{content:"\F02BF"}.mdi-tray-alert:before{content:"\F02C0"}.mdi-tray-full:before{content:"\F02C1"}.mdi-tray-minus:before{content:"\F02C2"}.mdi-tray-plus:before{content:"\F02C3"}.mdi-tray-remove:before{content:"\F02C4"}.mdi-treasure-chest:before{content:"\F725"}.mdi-tree:before{content:"\F531"}.mdi-tree-outline:before{content:"\FE4C"}.mdi-trello:before{content:"\F532"}.mdi-trending-down:before{content:"\F533"}.mdi-trending-neutral:before{content:"\F534"}.mdi-trending-up:before{content:"\F535"}.mdi-triangle:before{content:"\F536"}.mdi-triangle-outline:before{content:"\F537"}.mdi-triforce:before{content:"\FBB5"}.mdi-trophy:before{content:"\F538"}.mdi-trophy-award:before{content:"\F539"}.mdi-trophy-broken:before{content:"\FD80"}.mdi-trophy-outline:before{content:"\F53A"}.mdi-trophy-variant:before{content:"\F53B"}.mdi-trophy-variant-outline:before{content:"\F53C"}.mdi-truck:before{content:"\F53D"}.mdi-truck-check:before{content:"\FCB0"}.mdi-truck-check-outline:before{content:"\F02C5"}.mdi-truck-delivery:before{content:"\F53E"}.mdi-truck-delivery-outline:before{content:"\F02C6"}.mdi-truck-fast:before{content:"\F787"}.mdi-truck-fast-outline:before{content:"\F02C7"}.mdi-truck-outline:before{content:"\F02C8"}.mdi-truck-trailer:before{content:"\F726"}.mdi-trumpet:before{content:"\F00C1"}.mdi-tshirt-crew:before{content:"\FA7A"}.mdi-tshirt-crew-outline:before{content:"\F53F"}.mdi-tshirt-v:before{content:"\FA7B"}.mdi-tshirt-v-outline:before{content:"\F540"}.mdi-tumble-dryer:before{content:"\F916"}.mdi-tumble-dryer-alert:before{content:"\F01E5"}.mdi-tumble-dryer-off:before{content:"\F01E6"}.mdi-tumblr:before{content:"\F541"}.mdi-tumblr-box:before{content:"\F917"}.mdi-tumblr-reblog:before{content:"\F542"}.mdi-tune:before{content:"\F62E"}.mdi-tune-vertical:before{content:"\F66A"}.mdi-turnstile:before{content:"\FCB1"}.mdi-turnstile-outline:before{content:"\FCB2"}.mdi-turtle:before{content:"\FCB3"}.mdi-twitch:before{content:"\F543"}.mdi-twitter:before{content:"\F544"}.mdi-twitter-box:before{content:"\F545"}.mdi-twitter-circle:before{content:"\F546"}.mdi-twitter-retweet:before{content:"\F547"}.mdi-two-factor-authentication:before{content:"\F9AE"}.mdi-typewriter:before{content:"\FF4A"}.mdi-uber:before{content:"\F748"}.mdi-ubisoft:before{content:"\FBB6"}.mdi-ubuntu:before{content:"\F548"}.mdi-ufo:before{content:"\F00EF"}.mdi-ufo-outline:before{content:"\F00F0"}.mdi-ultra-high-definition:before{content:"\F7F8"}.mdi-umbraco:before{content:"\F549"}.mdi-umbrella:before{content:"\F54A"}.mdi-umbrella-closed:before{content:"\F9AF"}.mdi-umbrella-outline:before{content:"\F54B"}.mdi-undo:before{content:"\F54C"}.mdi-undo-variant:before{content:"\F54D"}.mdi-unfold-less-horizontal:before{content:"\F54E"}.mdi-unfold-less-vertical:before{content:"\F75F"}.mdi-unfold-more-horizontal:before{content:"\F54F"}.mdi-unfold-more-vertical:before{content:"\F760"}.mdi-ungroup:before{content:"\F550"}.mdi-unicode:before{content:"\FEED"}.mdi-unity:before{content:"\F6AE"}.mdi-unreal:before{content:"\F9B0"}.mdi-untappd:before{content:"\F551"}.mdi-update:before{content:"\F6AF"}.mdi-upload:before{content:"\F552"}.mdi-upload-multiple:before{content:"\F83C"}.mdi-upload-network:before{content:"\F6F5"}.mdi-upload-network-outline:before{content:"\FCB4"}.mdi-upload-off:before{content:"\F00F1"}.mdi-upload-off-outline:before{content:"\F00F2"}.mdi-upload-outline:before{content:"\FE67"}.mdi-usb:before{content:"\F553"}.mdi-usb-flash-drive:before{content:"\F02C9"}.mdi-usb-flash-drive-outline:before{content:"\F02CA"}.mdi-usb-port:before{content:"\F021B"}.mdi-valve:before{content:"\F0088"}.mdi-valve-closed:before{content:"\F0089"}.mdi-valve-open:before{content:"\F008A"}.mdi-van-passenger:before{content:"\F7F9"}.mdi-van-utility:before{content:"\F7FA"}.mdi-vanish:before{content:"\F7FB"}.mdi-vanity-light:before{content:"\F020C"}.mdi-variable:before{content:"\FAE6"}.mdi-variable-box:before{content:"\F013C"}.mdi-vector-arrange-above:before{content:"\F554"}.mdi-vector-arrange-below:before{content:"\F555"}.mdi-vector-bezier:before{content:"\FAE7"}.mdi-vector-circle:before{content:"\F556"}.mdi-vector-circle-variant:before{content:"\F557"}.mdi-vector-combine:before{content:"\F558"}.mdi-vector-curve:before{content:"\F559"}.mdi-vector-difference:before{content:"\F55A"}.mdi-vector-difference-ab:before{content:"\F55B"}.mdi-vector-difference-ba:before{content:"\F55C"}.mdi-vector-ellipse:before{content:"\F892"}.mdi-vector-intersection:before{content:"\F55D"}.mdi-vector-line:before{content:"\F55E"}.mdi-vector-link:before{content:"\F0009"}.mdi-vector-point:before{content:"\F55F"}.mdi-vector-polygon:before{content:"\F560"}.mdi-vector-polyline:before{content:"\F561"}.mdi-vector-polyline-edit:before{content:"\F0250"}.mdi-vector-polyline-minus:before{content:"\F0251"}.mdi-vector-polyline-plus:before{content:"\F0252"}.mdi-vector-polyline-remove:before{content:"\F0253"}.mdi-vector-radius:before{content:"\F749"}.mdi-vector-rectangle:before{content:"\F5C6"}.mdi-vector-selection:before{content:"\F562"}.mdi-vector-square:before{content:"\F001"}.mdi-vector-triangle:before{content:"\F563"}.mdi-vector-union:before{content:"\F564"}.mdi-venmo:before{content:"\F578"}.mdi-vhs:before{content:"\FA1A"}.mdi-vibrate:before{content:"\F566"}.mdi-vibrate-off:before{content:"\FCB5"}.mdi-video:before{content:"\F567"}.mdi-video-3d:before{content:"\F7FC"}.mdi-video-3d-variant:before{content:"\FEEE"}.mdi-video-4k-box:before{content:"\F83D"}.mdi-video-account:before{content:"\F918"}.mdi-video-check:before{content:"\F008B"}.mdi-video-check-outline:before{content:"\F008C"}.mdi-video-image:before{content:"\F919"}.mdi-video-input-antenna:before{content:"\F83E"}.mdi-video-input-component:before{content:"\F83F"}.mdi-video-input-hdmi:before{content:"\F840"}.mdi-video-input-scart:before{content:"\FFA9"}.mdi-video-input-svideo:before{content:"\F841"}.mdi-video-minus:before{content:"\F9B1"}.mdi-video-off:before{content:"\F568"}.mdi-video-off-outline:before{content:"\FBB7"}.mdi-video-outline:before{content:"\FBB8"}.mdi-video-plus:before{content:"\F9B2"}.mdi-video-stabilization:before{content:"\F91A"}.mdi-video-switch:before{content:"\F569"}.mdi-video-vintage:before{content:"\FA1B"}.mdi-video-wireless:before{content:"\FEEF"}.mdi-video-wireless-outline:before{content:"\FEF0"}.mdi-view-agenda:before{content:"\F56A"}.mdi-view-agenda-outline:before{content:"\F0203"}.mdi-view-array:before{content:"\F56B"}.mdi-view-carousel:before{content:"\F56C"}.mdi-view-column:before{content:"\F56D"}.mdi-view-comfy:before{content:"\FE4D"}.mdi-view-compact:before{content:"\FE4E"}.mdi-view-compact-outline:before{content:"\FE4F"}.mdi-view-dashboard:before{content:"\F56E"}.mdi-view-dashboard-outline:before{content:"\FA1C"}.mdi-view-dashboard-variant:before{content:"\F842"}.mdi-view-day:before{content:"\F56F"}.mdi-view-grid:before{content:"\F570"}.mdi-view-grid-outline:before{content:"\F0204"}.mdi-view-grid-plus:before{content:"\FFAA"}.mdi-view-grid-plus-outline:before{content:"\F0205"}.mdi-view-headline:before{content:"\F571"}.mdi-view-list:before{content:"\F572"}.mdi-view-module:before{content:"\F573"}.mdi-view-parallel:before{content:"\F727"}.mdi-view-quilt:before{content:"\F574"}.mdi-view-sequential:before{content:"\F728"}.mdi-view-split-horizontal:before{content:"\FBA7"}.mdi-view-split-vertical:before{content:"\FBA8"}.mdi-view-stream:before{content:"\F575"}.mdi-view-week:before{content:"\F576"}.mdi-vimeo:before{content:"\F577"}.mdi-violin:before{content:"\F60F"}.mdi-virtual-reality:before{content:"\F893"}.mdi-visual-studio:before{content:"\F610"}.mdi-visual-studio-code:before{content:"\FA1D"}.mdi-vk:before{content:"\F579"}.mdi-vk-box:before{content:"\F57A"}.mdi-vk-circle:before{content:"\F57B"}.mdi-vlc:before{content:"\F57C"}.mdi-voice:before{content:"\F5CB"}.mdi-voice-off:before{content:"\FEF1"}.mdi-voicemail:before{content:"\F57D"}.mdi-volleyball:before{content:"\F9B3"}.mdi-volume-high:before{content:"\F57E"}.mdi-volume-low:before{content:"\F57F"}.mdi-volume-medium:before{content:"\F580"}.mdi-volume-minus:before{content:"\F75D"}.mdi-volume-mute:before{content:"\F75E"}.mdi-volume-off:before{content:"\F581"}.mdi-volume-plus:before{content:"\F75C"}.mdi-volume-source:before{content:"\F014B"}.mdi-volume-variant-off:before{content:"\FE68"}.mdi-volume-vibrate:before{content:"\F014C"}.mdi-vote:before{content:"\FA1E"}.mdi-vote-outline:before{content:"\FA1F"}.mdi-vpn:before{content:"\F582"}.mdi-vuejs:before{content:"\F843"}.mdi-vuetify:before{content:"\FE50"}.mdi-walk:before{content:"\F583"}.mdi-wall:before{content:"\F7FD"}.mdi-wall-sconce:before{content:"\F91B"}.mdi-wall-sconce-flat:before{content:"\F91C"}.mdi-wall-sconce-variant:before{content:"\F91D"}.mdi-wallet:before{content:"\F584"}.mdi-wallet-giftcard:before{content:"\F585"}.mdi-wallet-membership:before{content:"\F586"}.mdi-wallet-outline:before{content:"\FBB9"}.mdi-wallet-plus:before{content:"\FFAB"}.mdi-wallet-plus-outline:before{content:"\FFAC"}.mdi-wallet-travel:before{content:"\F587"}.mdi-wallpaper:before{content:"\FE69"}.mdi-wan:before{content:"\F588"}.mdi-wardrobe:before{content:"\FFAD"}.mdi-wardrobe-outline:before{content:"\FFAE"}.mdi-warehouse:before{content:"\FFBB"}.mdi-washing-machine:before{content:"\F729"}.mdi-washing-machine-alert:before{content:"\F01E7"}.mdi-washing-machine-off:before{content:"\F01E8"}.mdi-watch:before{content:"\F589"}.mdi-watch-export:before{content:"\F58A"}.mdi-watch-export-variant:before{content:"\F894"}.mdi-watch-import:before{content:"\F58B"}.mdi-watch-import-variant:before{content:"\F895"}.mdi-watch-variant:before{content:"\F896"}.mdi-watch-vibrate:before{content:"\F6B0"}.mdi-watch-vibrate-off:before{content:"\FCB6"}.mdi-water:before{content:"\F58C"}.mdi-water-boiler:before{content:"\FFAF"}.mdi-water-boiler-alert:before{content:"\F01DE"}.mdi-water-boiler-off:before{content:"\F01DF"}.mdi-water-off:before{content:"\F58D"}.mdi-water-outline:before{content:"\FE6A"}.mdi-water-percent:before{content:"\F58E"}.mdi-water-polo:before{content:"\F02CB"}.mdi-water-pump:before{content:"\F58F"}.mdi-water-pump-off:before{content:"\FFB0"}.mdi-water-well:before{content:"\F008D"}.mdi-water-well-outline:before{content:"\F008E"}.mdi-watermark:before{content:"\F612"}.mdi-wave:before{content:"\FF4B"}.mdi-waves:before{content:"\F78C"}.mdi-waze:before{content:"\FBBA"}.mdi-weather-cloudy:before{content:"\F590"}.mdi-weather-cloudy-alert:before{content:"\FF4C"}.mdi-weather-cloudy-arrow-right:before{content:"\FE51"}.mdi-weather-fog:before{content:"\F591"}.mdi-weather-hail:before{content:"\F592"}.mdi-weather-hazy:before{content:"\FF4D"}.mdi-weather-hurricane:before{content:"\F897"}.mdi-weather-lightning:before{content:"\F593"}.mdi-weather-lightning-rainy:before{content:"\F67D"}.mdi-weather-night:before{content:"\F594"}.mdi-weather-night-partly-cloudy:before{content:"\FF4E"}.mdi-weather-partly-cloudy:before{content:"\F595"}.mdi-weather-partly-lightning:before{content:"\FF4F"}.mdi-weather-partly-rainy:before{content:"\FF50"}.mdi-weather-partly-snowy:before{content:"\FF51"}.mdi-weather-partly-snowy-rainy:before{content:"\FF52"}.mdi-weather-pouring:before{content:"\F596"}.mdi-weather-rainy:before{content:"\F597"}.mdi-weather-snowy:before{content:"\F598"}.mdi-weather-snowy-heavy:before{content:"\FF53"}.mdi-weather-snowy-rainy:before{content:"\F67E"}.mdi-weather-sunny:before{content:"\F599"}.mdi-weather-sunny-alert:before{content:"\FF54"}.mdi-weather-sunset:before{content:"\F59A"}.mdi-weather-sunset-down:before{content:"\F59B"}.mdi-weather-sunset-up:before{content:"\F59C"}.mdi-weather-tornado:before{content:"\FF55"}.mdi-weather-windy:before{content:"\F59D"}.mdi-weather-windy-variant:before{content:"\F59E"}.mdi-web:before{content:"\F59F"}.mdi-web-box:before{content:"\FFB1"}.mdi-web-clock:before{content:"\F0275"}.mdi-webcam:before{content:"\F5A0"}.mdi-webhook:before{content:"\F62F"}.mdi-webpack:before{content:"\F72A"}.mdi-webrtc:before{content:"\F0273"}.mdi-wechat:before{content:"\F611"}.mdi-weight:before{content:"\F5A1"}.mdi-weight-gram:before{content:"\FD1B"}.mdi-weight-kilogram:before{content:"\F5A2"}.mdi-weight-lifter:before{content:"\F0188"}.mdi-weight-pound:before{content:"\F9B4"}.mdi-whatsapp:before{content:"\F5A3"}.mdi-wheelchair-accessibility:before{content:"\F5A4"}.mdi-whistle:before{content:"\F9B5"}.mdi-white-balance-auto:before{content:"\F5A5"}.mdi-white-balance-incandescent:before{content:"\F5A6"}.mdi-white-balance-iridescent:before{content:"\F5A7"}.mdi-white-balance-sunny:before{content:"\F5A8"}.mdi-widgets:before{content:"\F72B"}.mdi-wifi:before{content:"\F5A9"}.mdi-wifi-off:before{content:"\F5AA"}.mdi-wifi-star:before{content:"\FE6B"}.mdi-wifi-strength-1:before{content:"\F91E"}.mdi-wifi-strength-1-alert:before{content:"\F91F"}.mdi-wifi-strength-1-lock:before{content:"\F920"}.mdi-wifi-strength-2:before{content:"\F921"}.mdi-wifi-strength-2-alert:before{content:"\F922"}.mdi-wifi-strength-2-lock:before{content:"\F923"}.mdi-wifi-strength-3:before{content:"\F924"}.mdi-wifi-strength-3-alert:before{content:"\F925"}.mdi-wifi-strength-3-lock:before{content:"\F926"}.mdi-wifi-strength-4:before{content:"\F927"}.mdi-wifi-strength-4-alert:before{content:"\F928"}.mdi-wifi-strength-4-lock:before{content:"\F929"}.mdi-wifi-strength-alert-outline:before{content:"\F92A"}.mdi-wifi-strength-lock-outline:before{content:"\F92B"}.mdi-wifi-strength-off:before{content:"\F92C"}.mdi-wifi-strength-off-outline:before{content:"\F92D"}.mdi-wifi-strength-outline:before{content:"\F92E"}.mdi-wii:before{content:"\F5AB"}.mdi-wiiu:before{content:"\F72C"}.mdi-wikipedia:before{content:"\F5AC"}.mdi-wind-turbine:before{content:"\FD81"}.mdi-window-close:before{content:"\F5AD"}.mdi-window-closed:before{content:"\F5AE"}.mdi-window-closed-variant:before{content:"\F0206"}.mdi-window-maximize:before{content:"\F5AF"}.mdi-window-minimize:before{content:"\F5B0"}.mdi-window-open:before{content:"\F5B1"}.mdi-window-open-variant:before{content:"\F0207"}.mdi-window-restore:before{content:"\F5B2"}.mdi-window-shutter:before{content:"\F0147"}.mdi-window-shutter-alert:before{content:"\F0148"}.mdi-window-shutter-open:before{content:"\F0149"}.mdi-windows:before{content:"\F5B3"}.mdi-windows-classic:before{content:"\FA20"}.mdi-wiper:before{content:"\FAE8"}.mdi-wiper-wash:before{content:"\FD82"}.mdi-wordpress:before{content:"\F5B4"}.mdi-worker:before{content:"\F5B5"}.mdi-wrap:before{content:"\F5B6"}.mdi-wrap-disabled:before{content:"\FBBB"}.mdi-wrench:before{content:"\F5B7"}.mdi-wrench-outline:before{content:"\FBBC"}.mdi-wunderlist:before{content:"\F5B8"}.mdi-xamarin:before{content:"\F844"}.mdi-xamarin-outline:before{content:"\F845"}.mdi-xaml:before{content:"\F673"}.mdi-xbox:before{content:"\F5B9"}.mdi-xbox-controller:before{content:"\F5BA"}.mdi-xbox-controller-battery-alert:before{content:"\F74A"}.mdi-xbox-controller-battery-charging:before{content:"\FA21"}.mdi-xbox-controller-battery-empty:before{content:"\F74B"}.mdi-xbox-controller-battery-full:before{content:"\F74C"}.mdi-xbox-controller-battery-low:before{content:"\F74D"}.mdi-xbox-controller-battery-medium:before{content:"\F74E"}.mdi-xbox-controller-battery-unknown:before{content:"\F74F"}.mdi-xbox-controller-menu:before{content:"\FE52"}.mdi-xbox-controller-off:before{content:"\F5BB"}.mdi-xbox-controller-view:before{content:"\FE53"}.mdi-xda:before{content:"\F5BC"}.mdi-xing:before{content:"\F5BD"}.mdi-xing-box:before{content:"\F5BE"}.mdi-xing-circle:before{content:"\F5BF"}.mdi-xml:before{content:"\F5C0"}.mdi-xmpp:before{content:"\F7FE"}.mdi-yahoo:before{content:"\FB2A"}.mdi-yammer:before{content:"\F788"}.mdi-yeast:before{content:"\F5C1"}.mdi-yelp:before{content:"\F5C2"}.mdi-yin-yang:before{content:"\F67F"}.mdi-yoga:before{content:"\F01A7"}.mdi-youtube:before{content:"\F5C3"}.mdi-youtube-creator-studio:before{content:"\F846"}.mdi-youtube-gaming:before{content:"\F847"}.mdi-youtube-subscription:before{content:"\FD1C"}.mdi-youtube-tv:before{content:"\F448"}.mdi-z-wave:before{content:"\FAE9"}.mdi-zend:before{content:"\FAEA"}.mdi-zigbee:before{content:"\FD1D"}.mdi-zip-box:before{content:"\F5C4"}.mdi-zip-box-outline:before{content:"\F001B"}.mdi-zip-disk:before{content:"\FA22"}.mdi-zodiac-aquarius:before{content:"\FA7C"}.mdi-zodiac-aries:before{content:"\FA7D"}.mdi-zodiac-cancer:before{content:"\FA7E"}.mdi-zodiac-capricorn:before{content:"\FA7F"}.mdi-zodiac-gemini:before{content:"\FA80"}.mdi-zodiac-leo:before{content:"\FA81"}.mdi-zodiac-libra:before{content:"\FA82"}.mdi-zodiac-pisces:before{content:"\FA83"}.mdi-zodiac-sagittarius:before{content:"\FA84"}.mdi-zodiac-scorpio:before{content:"\FA85"}.mdi-zodiac-taurus:before{content:"\FA86"}.mdi-zodiac-virgo:before{content:"\FA87"}.mdi-blank:before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:hsla(0,0%,100%,.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);-webkit-filter:FlipH;filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-filter:FlipV;filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s linear infinite;animation:mdi-spin 2s linear infinite}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@font-face{font-family:Material Icons;font-style:normal;font-weight:400;font-display:block;src:url(../fonts/MaterialIcons-Regular.96c47680.eot);src:local("\263A"),url(../fonts/MaterialIcons-Regular.0509ab09.woff2) format("woff2"),url(../fonts/MaterialIcons-Regular.29b882f0.woff) format("woff"),url(../fonts/MaterialIcons-Regular.da4ea5cd.ttf) format("truetype")}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-feature-settings:"liga";font-feature-settings:"liga"}.material-icons._10k:before{content:"\E951"}.material-icons._10mp:before{content:"\E952"}.material-icons._11mp:before{content:"\E953"}.material-icons._12mp:before{content:"\E954"}.material-icons._13mp:before{content:"\E955"}.material-icons._14mp:before{content:"\E956"}.material-icons._15mp:before{content:"\E957"}.material-icons._16mp:before{content:"\E958"}.material-icons._17mp:before{content:"\E959"}.material-icons._18mp:before{content:"\E95A"}.material-icons._19mp:before{content:"\E95B"}.material-icons._1k:before{content:"\E95C"}.material-icons._1k_plus:before{content:"\E95D"}.material-icons._20mp:before{content:"\E95E"}.material-icons._21mp:before{content:"\E95F"}.material-icons._22mp:before{content:"\E960"}.material-icons._23mp:before{content:"\E961"}.material-icons._24mp:before{content:"\E962"}.material-icons._2k:before{content:"\E963"}.material-icons._2k_plus:before{content:"\E964"}.material-icons._2mp:before{content:"\E965"}.material-icons._360:before{content:"\E577"}.material-icons._3d_rotation:before{content:"\E84D"}.material-icons._3k:before{content:"\E966"}.material-icons._3k_plus:before{content:"\E967"}.material-icons._3mp:before{content:"\E968"}.material-icons._4k:before{content:"\E072"}.material-icons._4k_plus:before{content:"\E969"}.material-icons._4mp:before{content:"\E96A"}.material-icons._5k:before{content:"\E96B"}.material-icons._5k_plus:before{content:"\E96C"}.material-icons._5mp:before{content:"\E96D"}.material-icons._6k:before{content:"\E96E"}.material-icons._6k_plus:before{content:"\E96F"}.material-icons._6mp:before{content:"\E970"}.material-icons._7k:before{content:"\E971"}.material-icons._7k_plus:before{content:"\E972"}.material-icons._7mp:before{content:"\E973"}.material-icons._8k:before{content:"\E974"}.material-icons._8k_plus:before{content:"\E975"}.material-icons._8mp:before{content:"\E976"}.material-icons._9k:before{content:"\E977"}.material-icons._9k_plus:before{content:"\E978"}.material-icons._9mp:before{content:"\E979"}.material-icons.ac_unit:before{content:"\EB3B"}.material-icons.access_alarm:before{content:"\E190"}.material-icons.access_alarms:before{content:"\E191"}.material-icons.access_time:before{content:"\E192"}.material-icons.accessibility:before{content:"\E84E"}.material-icons.accessibility_new:before{content:"\E92C"}.material-icons.accessible:before{content:"\E914"}.material-icons.accessible_forward:before{content:"\E934"}.material-icons.account_balance:before{content:"\E84F"}.material-icons.account_balance_wallet:before{content:"\E850"}.material-icons.account_box:before{content:"\E851"}.material-icons.account_circle:before{content:"\E853"}.material-icons.account_tree:before{content:"\E97A"}.material-icons.adb:before{content:"\E60E"}.material-icons.add:before{content:"\E145"}.material-icons.add_a_photo:before{content:"\E439"}.material-icons.add_alarm:before{content:"\E193"}.material-icons.add_alert:before{content:"\E003"}.material-icons.add_box:before{content:"\E146"}.material-icons.add_call:before{content:"\E0E8"}.material-icons.add_chart:before{content:"\E97B"}.material-icons.add_circle:before{content:"\E147"}.material-icons.add_circle_outline:before{content:"\E148"}.material-icons.add_comment:before{content:"\E266"}.material-icons.add_ic_call:before{content:"\E97C"}.material-icons.add_link:before{content:"\E178"}.material-icons.add_location:before{content:"\E567"}.material-icons.add_moderator:before{content:"\E97D"}.material-icons.add_photo_alternate:before{content:"\E43E"}.material-icons.add_shopping_cart:before{content:"\E854"}.material-icons.add_to_home_screen:before{content:"\E1FE"}.material-icons.add_to_photos:before{content:"\E39D"}.material-icons.add_to_queue:before{content:"\E05C"}.material-icons.adjust:before{content:"\E39E"}.material-icons.airline_seat_flat:before{content:"\E630"}.material-icons.airline_seat_flat_angled:before{content:"\E631"}.material-icons.airline_seat_individual_suite:before{content:"\E632"}.material-icons.airline_seat_legroom_extra:before{content:"\E633"}.material-icons.airline_seat_legroom_normal:before{content:"\E634"}.material-icons.airline_seat_legroom_reduced:before{content:"\E635"}.material-icons.airline_seat_recline_extra:before{content:"\E636"}.material-icons.airline_seat_recline_normal:before{content:"\E637"}.material-icons.airplanemode_active:before{content:"\E195"}.material-icons.airplanemode_inactive:before,.material-icons.airplanemode_off:before{content:"\E194"}.material-icons.airplanemode_on:before{content:"\E195"}.material-icons.airplay:before{content:"\E055"}.material-icons.airport_shuttle:before{content:"\EB3C"}.material-icons.alarm:before{content:"\E855"}.material-icons.alarm_add:before{content:"\E856"}.material-icons.alarm_off:before{content:"\E857"}.material-icons.alarm_on:before{content:"\E858"}.material-icons.album:before{content:"\E019"}.material-icons.all_inbox:before{content:"\E97F"}.material-icons.all_inclusive:before{content:"\EB3D"}.material-icons.all_out:before{content:"\E90B"}.material-icons.alternate_email:before{content:"\E0E6"}.material-icons.amp_stories:before{content:"\EA13"}.material-icons.android:before{content:"\E859"}.material-icons.announcement:before{content:"\E85A"}.material-icons.apartment:before{content:"\EA40"}.material-icons.approval:before{content:"\E982"}.material-icons.apps:before{content:"\E5C3"}.material-icons.archive:before{content:"\E149"}.material-icons.arrow_back:before{content:"\E5C4"}.material-icons.arrow_back_ios:before{content:"\E5E0"}.material-icons.arrow_downward:before{content:"\E5DB"}.material-icons.arrow_drop_down:before{content:"\E5C5"}.material-icons.arrow_drop_down_circle:before{content:"\E5C6"}.material-icons.arrow_drop_up:before{content:"\E5C7"}.material-icons.arrow_forward:before{content:"\E5C8"}.material-icons.arrow_forward_ios:before{content:"\E5E1"}.material-icons.arrow_left:before{content:"\E5DE"}.material-icons.arrow_right:before{content:"\E5DF"}.material-icons.arrow_right_alt:before{content:"\E941"}.material-icons.arrow_upward:before{content:"\E5D8"}.material-icons.art_track:before{content:"\E060"}.material-icons.aspect_ratio:before{content:"\E85B"}.material-icons.assessment:before{content:"\E85C"}.material-icons.assignment:before{content:"\E85D"}.material-icons.assignment_ind:before{content:"\E85E"}.material-icons.assignment_late:before{content:"\E85F"}.material-icons.assignment_return:before{content:"\E860"}.material-icons.assignment_returned:before{content:"\E861"}.material-icons.assignment_turned_in:before{content:"\E862"}.material-icons.assistant:before{content:"\E39F"}.material-icons.assistant_direction:before{content:"\E988"}.material-icons.assistant_navigation:before{content:"\E989"}.material-icons.assistant_photo:before{content:"\E3A0"}.material-icons.atm:before{content:"\E573"}.material-icons.attach_file:before{content:"\E226"}.material-icons.attach_money:before{content:"\E227"}.material-icons.attachment:before{content:"\E2BC"}.material-icons.attractions:before{content:"\EA52"}.material-icons.audiotrack:before{content:"\E3A1"}.material-icons.autorenew:before{content:"\E863"}.material-icons.av_timer:before{content:"\E01B"}.material-icons.backspace:before{content:"\E14A"}.material-icons.backup:before{content:"\E864"}.material-icons.badge:before{content:"\EA67"}.material-icons.bakery_dining:before{content:"\EA53"}.material-icons.ballot:before{content:"\E172"}.material-icons.bar_chart:before{content:"\E26B"}.material-icons.bathtub:before{content:"\EA41"}.material-icons.battery_alert:before{content:"\E19C"}.material-icons.battery_charging_full:before{content:"\E1A3"}.material-icons.battery_full:before{content:"\E1A4"}.material-icons.battery_std:before{content:"\E1A5"}.material-icons.battery_unknown:before{content:"\E1A6"}.material-icons.beach_access:before{content:"\EB3E"}.material-icons.beenhere:before{content:"\E52D"}.material-icons.block:before{content:"\E14B"}.material-icons.bluetooth:before{content:"\E1A7"}.material-icons.bluetooth_audio:before{content:"\E60F"}.material-icons.bluetooth_connected:before{content:"\E1A8"}.material-icons.bluetooth_disabled:before{content:"\E1A9"}.material-icons.bluetooth_searching:before{content:"\E1AA"}.material-icons.blur_circular:before{content:"\E3A2"}.material-icons.blur_linear:before{content:"\E3A3"}.material-icons.blur_off:before{content:"\E3A4"}.material-icons.blur_on:before{content:"\E3A5"}.material-icons.bolt:before{content:"\EA0B"}.material-icons.book:before{content:"\E865"}.material-icons.bookmark:before{content:"\E866"}.material-icons.bookmark_border:before,.material-icons.bookmark_outline:before{content:"\E867"}.material-icons.bookmarks:before{content:"\E98B"}.material-icons.border_all:before{content:"\E228"}.material-icons.border_bottom:before{content:"\E229"}.material-icons.border_clear:before{content:"\E22A"}.material-icons.border_color:before{content:"\E22B"}.material-icons.border_horizontal:before{content:"\E22C"}.material-icons.border_inner:before{content:"\E22D"}.material-icons.border_left:before{content:"\E22E"}.material-icons.border_outer:before{content:"\E22F"}.material-icons.border_right:before{content:"\E230"}.material-icons.border_style:before{content:"\E231"}.material-icons.border_top:before{content:"\E232"}.material-icons.border_vertical:before{content:"\E233"}.material-icons.branding_watermark:before{content:"\E06B"}.material-icons.breakfast_dining:before{content:"\EA54"}.material-icons.brightness_1:before{content:"\E3A6"}.material-icons.brightness_2:before{content:"\E3A7"}.material-icons.brightness_3:before{content:"\E3A8"}.material-icons.brightness_4:before{content:"\E3A9"}.material-icons.brightness_5:before{content:"\E3AA"}.material-icons.brightness_6:before{content:"\E3AB"}.material-icons.brightness_7:before{content:"\E3AC"}.material-icons.brightness_auto:before{content:"\E1AB"}.material-icons.brightness_high:before{content:"\E1AC"}.material-icons.brightness_low:before{content:"\E1AD"}.material-icons.brightness_medium:before{content:"\E1AE"}.material-icons.broken_image:before{content:"\E3AD"}.material-icons.brunch_dining:before{content:"\EA73"}.material-icons.brush:before{content:"\E3AE"}.material-icons.bubble_chart:before{content:"\E6DD"}.material-icons.bug_report:before{content:"\E868"}.material-icons.build:before{content:"\E869"}.material-icons.burst_mode:before{content:"\E43C"}.material-icons.bus_alert:before{content:"\E98F"}.material-icons.business:before{content:"\E0AF"}.material-icons.business_center:before{content:"\EB3F"}.material-icons.cached:before{content:"\E86A"}.material-icons.cake:before{content:"\E7E9"}.material-icons.calendar_today:before{content:"\E935"}.material-icons.calendar_view_day:before{content:"\E936"}.material-icons.call:before{content:"\E0B0"}.material-icons.call_end:before{content:"\E0B1"}.material-icons.call_made:before{content:"\E0B2"}.material-icons.call_merge:before{content:"\E0B3"}.material-icons.call_missed:before{content:"\E0B4"}.material-icons.call_missed_outgoing:before{content:"\E0E4"}.material-icons.call_received:before{content:"\E0B5"}.material-icons.call_split:before{content:"\E0B6"}.material-icons.call_to_action:before{content:"\E06C"}.material-icons.camera:before{content:"\E3AF"}.material-icons.camera_alt:before{content:"\E3B0"}.material-icons.camera_enhance:before{content:"\E8FC"}.material-icons.camera_front:before{content:"\E3B1"}.material-icons.camera_rear:before{content:"\E3B2"}.material-icons.camera_roll:before{content:"\E3B3"}.material-icons.cancel:before{content:"\E5C9"}.material-icons.cancel_presentation:before{content:"\E0E9"}.material-icons.cancel_schedule_send:before{content:"\EA39"}.material-icons.car_rental:before{content:"\EA55"}.material-icons.car_repair:before{content:"\EA56"}.material-icons.card_giftcard:before{content:"\E8F6"}.material-icons.card_membership:before{content:"\E8F7"}.material-icons.card_travel:before{content:"\E8F8"}.material-icons.cases:before{content:"\E992"}.material-icons.casino:before{content:"\EB40"}.material-icons.cast:before{content:"\E307"}.material-icons.cast_connected:before{content:"\E308"}.material-icons.category:before{content:"\E574"}.material-icons.celebration:before{content:"\EA65"}.material-icons.cell_wifi:before{content:"\E0EC"}.material-icons.center_focus_strong:before{content:"\E3B4"}.material-icons.center_focus_weak:before{content:"\E3B5"}.material-icons.change_history:before{content:"\E86B"}.material-icons.chat:before{content:"\E0B7"}.material-icons.chat_bubble:before{content:"\E0CA"}.material-icons.chat_bubble_outline:before{content:"\E0CB"}.material-icons.check:before{content:"\E5CA"}.material-icons.check_box:before{content:"\E834"}.material-icons.check_box_outline_blank:before{content:"\E835"}.material-icons.check_circle:before{content:"\E86C"}.material-icons.check_circle_outline:before{content:"\E92D"}.material-icons.chevron_left:before{content:"\E5CB"}.material-icons.chevron_right:before{content:"\E5CC"}.material-icons.child_care:before{content:"\EB41"}.material-icons.child_friendly:before{content:"\EB42"}.material-icons.chrome_reader_mode:before{content:"\E86D"}.material-icons.circle_notifications:before{content:"\E994"}.material-icons.class:before{content:"\E86E"}.material-icons.clear:before{content:"\E14C"}.material-icons.clear_all:before{content:"\E0B8"}.material-icons.close:before{content:"\E5CD"}.material-icons.closed_caption:before{content:"\E01C"}.material-icons.closed_caption_off:before{content:"\E996"}.material-icons.cloud:before{content:"\E2BD"}.material-icons.cloud_circle:before{content:"\E2BE"}.material-icons.cloud_done:before{content:"\E2BF"}.material-icons.cloud_download:before{content:"\E2C0"}.material-icons.cloud_off:before{content:"\E2C1"}.material-icons.cloud_queue:before{content:"\E2C2"}.material-icons.cloud_upload:before{content:"\E2C3"}.material-icons.code:before{content:"\E86F"}.material-icons.collections:before{content:"\E3B6"}.material-icons.collections_bookmark:before{content:"\E431"}.material-icons.color_lens:before{content:"\E3B7"}.material-icons.colorize:before{content:"\E3B8"}.material-icons.comment:before{content:"\E0B9"}.material-icons.commute:before{content:"\E940"}.material-icons.compare:before{content:"\E3B9"}.material-icons.compare_arrows:before{content:"\E915"}.material-icons.compass_calibration:before{content:"\E57C"}.material-icons.compress:before{content:"\E94D"}.material-icons.computer:before{content:"\E30A"}.material-icons.confirmation_num:before,.material-icons.confirmation_number:before{content:"\E638"}.material-icons.connected_tv:before{content:"\E998"}.material-icons.contact_mail:before{content:"\E0D0"}.material-icons.contact_phone:before{content:"\E0CF"}.material-icons.contact_support:before{content:"\E94C"}.material-icons.contactless:before{content:"\EA71"}.material-icons.contacts:before{content:"\E0BA"}.material-icons.content_copy:before{content:"\E14D"}.material-icons.content_cut:before{content:"\E14E"}.material-icons.content_paste:before{content:"\E14F"}.material-icons.control_camera:before{content:"\E074"}.material-icons.control_point:before{content:"\E3BA"}.material-icons.control_point_duplicate:before{content:"\E3BB"}.material-icons.copyright:before{content:"\E90C"}.material-icons.create:before{content:"\E150"}.material-icons.create_new_folder:before{content:"\E2CC"}.material-icons.credit_card:before{content:"\E870"}.material-icons.crop:before{content:"\E3BE"}.material-icons.crop_16_9:before{content:"\E3BC"}.material-icons.crop_3_2:before{content:"\E3BD"}.material-icons.crop_5_4:before{content:"\E3BF"}.material-icons.crop_7_5:before{content:"\E3C0"}.material-icons.crop_din:before{content:"\E3C1"}.material-icons.crop_free:before{content:"\E3C2"}.material-icons.crop_landscape:before{content:"\E3C3"}.material-icons.crop_original:before{content:"\E3C4"}.material-icons.crop_portrait:before{content:"\E3C5"}.material-icons.crop_rotate:before{content:"\E437"}.material-icons.crop_square:before{content:"\E3C6"}.material-icons.dangerous:before{content:"\E99A"}.material-icons.dashboard:before{content:"\E871"}.material-icons.dashboard_customize:before{content:"\E99B"}.material-icons.data_usage:before{content:"\E1AF"}.material-icons.date_range:before{content:"\E916"}.material-icons.deck:before{content:"\EA42"}.material-icons.dehaze:before{content:"\E3C7"}.material-icons.delete:before{content:"\E872"}.material-icons.delete_forever:before{content:"\E92B"}.material-icons.delete_outline:before{content:"\E92E"}.material-icons.delete_sweep:before{content:"\E16C"}.material-icons.delivery_dining:before{content:"\EA72"}.material-icons.departure_board:before{content:"\E576"}.material-icons.description:before{content:"\E873"}.material-icons.desktop_access_disabled:before{content:"\E99D"}.material-icons.desktop_mac:before{content:"\E30B"}.material-icons.desktop_windows:before{content:"\E30C"}.material-icons.details:before{content:"\E3C8"}.material-icons.developer_board:before{content:"\E30D"}.material-icons.developer_mode:before{content:"\E1B0"}.material-icons.device_hub:before{content:"\E335"}.material-icons.device_thermostat:before{content:"\E1FF"}.material-icons.device_unknown:before{content:"\E339"}.material-icons.devices:before{content:"\E1B1"}.material-icons.devices_other:before{content:"\E337"}.material-icons.dialer_sip:before{content:"\E0BB"}.material-icons.dialpad:before{content:"\E0BC"}.material-icons.dinner_dining:before{content:"\EA57"}.material-icons.directions:before{content:"\E52E"}.material-icons.directions_bike:before{content:"\E52F"}.material-icons.directions_boat:before{content:"\E532"}.material-icons.directions_bus:before{content:"\E530"}.material-icons.directions_car:before{content:"\E531"}.material-icons.directions_ferry:before{content:"\E532"}.material-icons.directions_railway:before{content:"\E534"}.material-icons.directions_run:before{content:"\E566"}.material-icons.directions_subway:before{content:"\E533"}.material-icons.directions_train:before{content:"\E534"}.material-icons.directions_transit:before{content:"\E535"}.material-icons.directions_walk:before{content:"\E536"}.material-icons.disc_full:before{content:"\E610"}.material-icons.dnd_forwardslash:before{content:"\E611"}.material-icons.dns:before{content:"\E875"}.material-icons.do_not_disturb:before{content:"\E612"}.material-icons.do_not_disturb_alt:before{content:"\E611"}.material-icons.do_not_disturb_off:before{content:"\E643"}.material-icons.do_not_disturb_on:before{content:"\E644"}.material-icons.dock:before{content:"\E30E"}.material-icons.domain:before{content:"\E7EE"}.material-icons.domain_disabled:before{content:"\E0EF"}.material-icons.done:before{content:"\E876"}.material-icons.done_all:before{content:"\E877"}.material-icons.done_outline:before{content:"\E92F"}.material-icons.donut_large:before{content:"\E917"}.material-icons.donut_small:before{content:"\E918"}.material-icons.double_arrow:before{content:"\EA50"}.material-icons.drafts:before{content:"\E151"}.material-icons.drag_handle:before{content:"\E25D"}.material-icons.drag_indicator:before{content:"\E945"}.material-icons.drive_eta:before{content:"\E613"}.material-icons.drive_file_move_outline:before{content:"\E9A1"}.material-icons.drive_file_rename_outline:before{content:"\E9A2"}.material-icons.drive_folder_upload:before{content:"\E9A3"}.material-icons.dry_cleaning:before{content:"\EA58"}.material-icons.duo:before{content:"\E9A5"}.material-icons.dvr:before{content:"\E1B2"}.material-icons.dynamic_feed:before{content:"\EA14"}.material-icons.eco:before{content:"\EA35"}.material-icons.edit:before{content:"\E3C9"}.material-icons.edit_attributes:before{content:"\E578"}.material-icons.edit_location:before{content:"\E568"}.material-icons.edit_off:before{content:"\E950"}.material-icons.eject:before{content:"\E8FB"}.material-icons.email:before{content:"\E0BE"}.material-icons.emoji_emotions:before{content:"\EA22"}.material-icons.emoji_events:before{content:"\EA23"}.material-icons.emoji_flags:before{content:"\EA1A"}.material-icons.emoji_food_beverage:before{content:"\EA1B"}.material-icons.emoji_nature:before{content:"\EA1C"}.material-icons.emoji_objects:before{content:"\EA24"}.material-icons.emoji_people:before{content:"\EA1D"}.material-icons.emoji_symbols:before{content:"\EA1E"}.material-icons.emoji_transportation:before{content:"\EA1F"}.material-icons.enhance_photo_translate:before{content:"\E8FC"}.material-icons.enhanced_encryption:before{content:"\E63F"}.material-icons.equalizer:before{content:"\E01D"}.material-icons.error:before{content:"\E000"}.material-icons.error_outline:before{content:"\E001"}.material-icons.euro:before{content:"\EA15"}.material-icons.euro_symbol:before{content:"\E926"}.material-icons.ev_station:before{content:"\E56D"}.material-icons.event:before{content:"\E878"}.material-icons.event_available:before{content:"\E614"}.material-icons.event_busy:before{content:"\E615"}.material-icons.event_note:before{content:"\E616"}.material-icons.event_seat:before{content:"\E903"}.material-icons.exit_to_app:before{content:"\E879"}.material-icons.expand:before{content:"\E94F"}.material-icons.expand_less:before{content:"\E5CE"}.material-icons.expand_more:before{content:"\E5CF"}.material-icons.explicit:before{content:"\E01E"}.material-icons.explore:before{content:"\E87A"}.material-icons.explore_off:before{content:"\E9A8"}.material-icons.exposure:before{content:"\E3CA"}.material-icons.exposure_minus_1:before{content:"\E3CB"}.material-icons.exposure_minus_2:before{content:"\E3CC"}.material-icons.exposure_neg_1:before{content:"\E3CB"}.material-icons.exposure_neg_2:before{content:"\E3CC"}.material-icons.exposure_plus_1:before{content:"\E3CD"}.material-icons.exposure_plus_2:before{content:"\E3CE"}.material-icons.exposure_zero:before{content:"\E3CF"}.material-icons.extension:before{content:"\E87B"}.material-icons.face:before{content:"\E87C"}.material-icons.fast_forward:before{content:"\E01F"}.material-icons.fast_rewind:before{content:"\E020"}.material-icons.fastfood:before{content:"\E57A"}.material-icons.favorite:before{content:"\E87D"}.material-icons.favorite_border:before,.material-icons.favorite_outline:before{content:"\E87E"}.material-icons.featured_play_list:before{content:"\E06D"}.material-icons.featured_video:before{content:"\E06E"}.material-icons.feedback:before{content:"\E87F"}.material-icons.festival:before{content:"\EA68"}.material-icons.fiber_dvr:before{content:"\E05D"}.material-icons.fiber_manual_record:before{content:"\E061"}.material-icons.fiber_new:before{content:"\E05E"}.material-icons.fiber_pin:before{content:"\E06A"}.material-icons.fiber_smart_record:before{content:"\E062"}.material-icons.file_copy:before{content:"\E173"}.material-icons.file_download:before{content:"\E2C4"}.material-icons.file_download_done:before{content:"\E9AA"}.material-icons.file_present:before{content:"\EA0E"}.material-icons.file_upload:before{content:"\E2C6"}.material-icons.filter:before{content:"\E3D3"}.material-icons.filter_1:before{content:"\E3D0"}.material-icons.filter_2:before{content:"\E3D1"}.material-icons.filter_3:before{content:"\E3D2"}.material-icons.filter_4:before{content:"\E3D4"}.material-icons.filter_5:before{content:"\E3D5"}.material-icons.filter_6:before{content:"\E3D6"}.material-icons.filter_7:before{content:"\E3D7"}.material-icons.filter_8:before{content:"\E3D8"}.material-icons.filter_9:before{content:"\E3D9"}.material-icons.filter_9_plus:before{content:"\E3DA"}.material-icons.filter_b_and_w:before{content:"\E3DB"}.material-icons.filter_center_focus:before{content:"\E3DC"}.material-icons.filter_drama:before{content:"\E3DD"}.material-icons.filter_frames:before{content:"\E3DE"}.material-icons.filter_hdr:before{content:"\E3DF"}.material-icons.filter_list:before{content:"\E152"}.material-icons.filter_list_alt:before{content:"\E94E"}.material-icons.filter_none:before{content:"\E3E0"}.material-icons.filter_tilt_shift:before{content:"\E3E2"}.material-icons.filter_vintage:before{content:"\E3E3"}.material-icons.find_in_page:before{content:"\E880"}.material-icons.find_replace:before{content:"\E881"}.material-icons.fingerprint:before{content:"\E90D"}.material-icons.fireplace:before{content:"\EA43"}.material-icons.first_page:before{content:"\E5DC"}.material-icons.fit_screen:before{content:"\EA10"}.material-icons.fitness_center:before{content:"\EB43"}.material-icons.flag:before{content:"\E153"}.material-icons.flare:before{content:"\E3E4"}.material-icons.flash_auto:before{content:"\E3E5"}.material-icons.flash_off:before{content:"\E3E6"}.material-icons.flash_on:before{content:"\E3E7"}.material-icons.flight:before{content:"\E539"}.material-icons.flight_land:before{content:"\E904"}.material-icons.flight_takeoff:before{content:"\E905"}.material-icons.flip:before{content:"\E3E8"}.material-icons.flip_camera_android:before{content:"\EA37"}.material-icons.flip_camera_ios:before{content:"\EA38"}.material-icons.flip_to_back:before{content:"\E882"}.material-icons.flip_to_front:before{content:"\E883"}.material-icons.folder:before{content:"\E2C7"}.material-icons.folder_open:before{content:"\E2C8"}.material-icons.folder_shared:before{content:"\E2C9"}.material-icons.folder_special:before{content:"\E617"}.material-icons.font_download:before{content:"\E167"}.material-icons.format_align_center:before{content:"\E234"}.material-icons.format_align_justify:before{content:"\E235"}.material-icons.format_align_left:before{content:"\E236"}.material-icons.format_align_right:before{content:"\E237"}.material-icons.format_bold:before{content:"\E238"}.material-icons.format_clear:before{content:"\E239"}.material-icons.format_color_fill:before{content:"\E23A"}.material-icons.format_color_reset:before{content:"\E23B"}.material-icons.format_color_text:before{content:"\E23C"}.material-icons.format_indent_decrease:before{content:"\E23D"}.material-icons.format_indent_increase:before{content:"\E23E"}.material-icons.format_italic:before{content:"\E23F"}.material-icons.format_line_spacing:before{content:"\E240"}.material-icons.format_list_bulleted:before{content:"\E241"}.material-icons.format_list_numbered:before{content:"\E242"}.material-icons.format_list_numbered_rtl:before{content:"\E267"}.material-icons.format_paint:before{content:"\E243"}.material-icons.format_quote:before{content:"\E244"}.material-icons.format_shapes:before{content:"\E25E"}.material-icons.format_size:before{content:"\E245"}.material-icons.format_strikethrough:before{content:"\E246"}.material-icons.format_textdirection_l_to_r:before{content:"\E247"}.material-icons.format_textdirection_r_to_l:before{content:"\E248"}.material-icons.format_underline:before,.material-icons.format_underlined:before{content:"\E249"}.material-icons.forum:before{content:"\E0BF"}.material-icons.forward:before{content:"\E154"}.material-icons.forward_10:before{content:"\E056"}.material-icons.forward_30:before{content:"\E057"}.material-icons.forward_5:before{content:"\E058"}.material-icons.free_breakfast:before{content:"\EB44"}.material-icons.fullscreen:before{content:"\E5D0"}.material-icons.fullscreen_exit:before{content:"\E5D1"}.material-icons.functions:before{content:"\E24A"}.material-icons.g_translate:before{content:"\E927"}.material-icons.gamepad:before{content:"\E30F"}.material-icons.games:before{content:"\E021"}.material-icons.gavel:before{content:"\E90E"}.material-icons.gesture:before{content:"\E155"}.material-icons.get_app:before{content:"\E884"}.material-icons.gif:before{content:"\E908"}.material-icons.goat:before{content:"\DBFF"}.material-icons.golf_course:before{content:"\EB45"}.material-icons.gps_fixed:before{content:"\E1B3"}.material-icons.gps_not_fixed:before{content:"\E1B4"}.material-icons.gps_off:before{content:"\E1B5"}.material-icons.grade:before{content:"\E885"}.material-icons.gradient:before{content:"\E3E9"}.material-icons.grain:before{content:"\E3EA"}.material-icons.graphic_eq:before{content:"\E1B8"}.material-icons.grid_off:before{content:"\E3EB"}.material-icons.grid_on:before{content:"\E3EC"}.material-icons.grid_view:before{content:"\E9B0"}.material-icons.group:before{content:"\E7EF"}.material-icons.group_add:before{content:"\E7F0"}.material-icons.group_work:before{content:"\E886"}.material-icons.hail:before{content:"\E9B1"}.material-icons.hardware:before{content:"\EA59"}.material-icons.hd:before{content:"\E052"}.material-icons.hdr_off:before{content:"\E3ED"}.material-icons.hdr_on:before{content:"\E3EE"}.material-icons.hdr_strong:before{content:"\E3F1"}.material-icons.hdr_weak:before{content:"\E3F2"}.material-icons.headset:before{content:"\E310"}.material-icons.headset_mic:before{content:"\E311"}.material-icons.headset_off:before{content:"\E33A"}.material-icons.healing:before{content:"\E3F3"}.material-icons.hearing:before{content:"\E023"}.material-icons.height:before{content:"\EA16"}.material-icons.help:before{content:"\E887"}.material-icons.help_outline:before{content:"\E8FD"}.material-icons.high_quality:before{content:"\E024"}.material-icons.highlight:before{content:"\E25F"}.material-icons.highlight_off:before,.material-icons.highlight_remove:before{content:"\E888"}.material-icons.history:before{content:"\E889"}.material-icons.home:before{content:"\E88A"}.material-icons.home_filled:before{content:"\E9B2"}.material-icons.home_work:before{content:"\EA09"}.material-icons.horizontal_split:before{content:"\E947"}.material-icons.hot_tub:before{content:"\EB46"}.material-icons.hotel:before{content:"\E53A"}.material-icons.hourglass_empty:before{content:"\E88B"}.material-icons.hourglass_full:before{content:"\E88C"}.material-icons.house:before{content:"\EA44"}.material-icons.how_to_reg:before{content:"\E174"}.material-icons.how_to_vote:before{content:"\E175"}.material-icons.http:before{content:"\E902"}.material-icons.https:before{content:"\E88D"}.material-icons.icecream:before{content:"\EA69"}.material-icons.image:before{content:"\E3F4"}.material-icons.image_aspect_ratio:before{content:"\E3F5"}.material-icons.image_search:before{content:"\E43F"}.material-icons.imagesearch_roller:before{content:"\E9B4"}.material-icons.import_contacts:before{content:"\E0E0"}.material-icons.import_export:before{content:"\E0C3"}.material-icons.important_devices:before{content:"\E912"}.material-icons.inbox:before{content:"\E156"}.material-icons.indeterminate_check_box:before{content:"\E909"}.material-icons.info:before{content:"\E88E"}.material-icons.info_outline:before{content:"\E88F"}.material-icons.input:before{content:"\E890"}.material-icons.insert_chart:before{content:"\E24B"}.material-icons.insert_chart_outlined:before{content:"\E26A"}.material-icons.insert_comment:before{content:"\E24C"}.material-icons.insert_drive_file:before{content:"\E24D"}.material-icons.insert_emoticon:before{content:"\E24E"}.material-icons.insert_invitation:before{content:"\E24F"}.material-icons.insert_link:before{content:"\E250"}.material-icons.insert_photo:before{content:"\E251"}.material-icons.inventory:before{content:"\E179"}.material-icons.invert_colors:before{content:"\E891"}.material-icons.invert_colors_off:before{content:"\E0C4"}.material-icons.invert_colors_on:before{content:"\E891"}.material-icons.iso:before{content:"\E3F6"}.material-icons.keyboard:before{content:"\E312"}.material-icons.keyboard_arrow_down:before{content:"\E313"}.material-icons.keyboard_arrow_left:before{content:"\E314"}.material-icons.keyboard_arrow_right:before{content:"\E315"}.material-icons.keyboard_arrow_up:before{content:"\E316"}.material-icons.keyboard_backspace:before{content:"\E317"}.material-icons.keyboard_capslock:before{content:"\E318"}.material-icons.keyboard_control:before{content:"\E5D3"}.material-icons.keyboard_hide:before{content:"\E31A"}.material-icons.keyboard_return:before{content:"\E31B"}.material-icons.keyboard_tab:before{content:"\E31C"}.material-icons.keyboard_voice:before{content:"\E31D"}.material-icons.king_bed:before{content:"\EA45"}.material-icons.kitchen:before{content:"\EB47"}.material-icons.label:before{content:"\E892"}.material-icons.label_important:before{content:"\E937"}.material-icons.label_important_outline:before{content:"\E948"}.material-icons.label_off:before{content:"\E9B6"}.material-icons.label_outline:before{content:"\E893"}.material-icons.landscape:before{content:"\E3F7"}.material-icons.language:before{content:"\E894"}.material-icons.laptop:before{content:"\E31E"}.material-icons.laptop_chromebook:before{content:"\E31F"}.material-icons.laptop_mac:before{content:"\E320"}.material-icons.laptop_windows:before{content:"\E321"}.material-icons.last_page:before{content:"\E5DD"}.material-icons.launch:before{content:"\E895"}.material-icons.layers:before{content:"\E53B"}.material-icons.layers_clear:before{content:"\E53C"}.material-icons.leak_add:before{content:"\E3F8"}.material-icons.leak_remove:before{content:"\E3F9"}.material-icons.lens:before{content:"\E3FA"}.material-icons.library_add:before{content:"\E02E"}.material-icons.library_add_check:before{content:"\E9B7"}.material-icons.library_books:before{content:"\E02F"}.material-icons.library_music:before{content:"\E030"}.material-icons.lightbulb:before{content:"\E0F0"}.material-icons.lightbulb_outline:before{content:"\E90F"}.material-icons.line_style:before{content:"\E919"}.material-icons.line_weight:before{content:"\E91A"}.material-icons.linear_scale:before{content:"\E260"}.material-icons.link:before{content:"\E157"}.material-icons.link_off:before{content:"\E16F"}.material-icons.linked_camera:before{content:"\E438"}.material-icons.liquor:before{content:"\EA60"}.material-icons.list:before{content:"\E896"}.material-icons.list_alt:before{content:"\E0EE"}.material-icons.live_help:before{content:"\E0C6"}.material-icons.live_tv:before{content:"\E639"}.material-icons.local_activity:before{content:"\E53F"}.material-icons.local_airport:before{content:"\E53D"}.material-icons.local_atm:before{content:"\E53E"}.material-icons.local_attraction:before{content:"\E53F"}.material-icons.local_bar:before{content:"\E540"}.material-icons.local_cafe:before{content:"\E541"}.material-icons.local_car_wash:before{content:"\E542"}.material-icons.local_convenience_store:before{content:"\E543"}.material-icons.local_dining:before{content:"\E556"}.material-icons.local_drink:before{content:"\E544"}.material-icons.local_florist:before{content:"\E545"}.material-icons.local_gas_station:before{content:"\E546"}.material-icons.local_grocery_store:before{content:"\E547"}.material-icons.local_hospital:before{content:"\E548"}.material-icons.local_hotel:before{content:"\E549"}.material-icons.local_laundry_service:before{content:"\E54A"}.material-icons.local_library:before{content:"\E54B"}.material-icons.local_mall:before{content:"\E54C"}.material-icons.local_movies:before{content:"\E54D"}.material-icons.local_offer:before{content:"\E54E"}.material-icons.local_parking:before{content:"\E54F"}.material-icons.local_pharmacy:before{content:"\E550"}.material-icons.local_phone:before{content:"\E551"}.material-icons.local_pizza:before{content:"\E552"}.material-icons.local_play:before{content:"\E553"}.material-icons.local_post_office:before{content:"\E554"}.material-icons.local_print_shop:before,.material-icons.local_printshop:before{content:"\E555"}.material-icons.local_restaurant:before{content:"\E556"}.material-icons.local_see:before{content:"\E557"}.material-icons.local_shipping:before{content:"\E558"}.material-icons.local_taxi:before{content:"\E559"}.material-icons.location_city:before{content:"\E7F1"}.material-icons.location_disabled:before{content:"\E1B6"}.material-icons.location_history:before{content:"\E55A"}.material-icons.location_off:before{content:"\E0C7"}.material-icons.location_on:before{content:"\E0C8"}.material-icons.location_searching:before{content:"\E1B7"}.material-icons.lock:before{content:"\E897"}.material-icons.lock_open:before{content:"\E898"}.material-icons.lock_outline:before{content:"\E899"}.material-icons.logout:before{content:"\E9BA"}.material-icons.looks:before{content:"\E3FC"}.material-icons.looks_3:before{content:"\E3FB"}.material-icons.looks_4:before{content:"\E3FD"}.material-icons.looks_5:before{content:"\E3FE"}.material-icons.looks_6:before{content:"\E3FF"}.material-icons.looks_one:before{content:"\E400"}.material-icons.looks_two:before{content:"\E401"}.material-icons.loop:before{content:"\E028"}.material-icons.loupe:before{content:"\E402"}.material-icons.low_priority:before{content:"\E16D"}.material-icons.loyalty:before{content:"\E89A"}.material-icons.lunch_dining:before{content:"\EA61"}.material-icons.mail:before{content:"\E158"}.material-icons.mail_outline:before{content:"\E0E1"}.material-icons.map:before{content:"\E55B"}.material-icons.margin:before{content:"\E9BB"}.material-icons.mark_as_unread:before{content:"\E9BC"}.material-icons.markunread:before{content:"\E159"}.material-icons.markunread_mailbox:before{content:"\E89B"}.material-icons.maximize:before{content:"\E930"}.material-icons.meeting_room:before{content:"\EB4F"}.material-icons.memory:before{content:"\E322"}.material-icons.menu:before{content:"\E5D2"}.material-icons.menu_book:before{content:"\EA19"}.material-icons.menu_open:before{content:"\E9BD"}.material-icons.merge_type:before{content:"\E252"}.material-icons.message:before{content:"\E0C9"}.material-icons.messenger:before{content:"\E0CA"}.material-icons.messenger_outline:before{content:"\E0CB"}.material-icons.mic:before{content:"\E029"}.material-icons.mic_none:before{content:"\E02A"}.material-icons.mic_off:before{content:"\E02B"}.material-icons.minimize:before{content:"\E931"}.material-icons.missed_video_call:before{content:"\E073"}.material-icons.mms:before{content:"\E618"}.material-icons.mobile_friendly:before{content:"\E200"}.material-icons.mobile_off:before{content:"\E201"}.material-icons.mobile_screen_share:before{content:"\E0E7"}.material-icons.mode_comment:before{content:"\E253"}.material-icons.mode_edit:before{content:"\E254"}.material-icons.monetization_on:before{content:"\E263"}.material-icons.money:before{content:"\E57D"}.material-icons.money_off:before{content:"\E25C"}.material-icons.monochrome_photos:before{content:"\E403"}.material-icons.mood:before{content:"\E7F2"}.material-icons.mood_bad:before{content:"\E7F3"}.material-icons.more:before{content:"\E619"}.material-icons.more_horiz:before{content:"\E5D3"}.material-icons.more_vert:before{content:"\E5D4"}.material-icons.motorcycle:before{content:"\E91B"}.material-icons.mouse:before{content:"\E323"}.material-icons.move_to_inbox:before{content:"\E168"}.material-icons.movie:before{content:"\E02C"}.material-icons.movie_creation:before{content:"\E404"}.material-icons.movie_filter:before{content:"\E43A"}.material-icons.mp:before{content:"\E9C3"}.material-icons.multiline_chart:before{content:"\E6DF"}.material-icons.multitrack_audio:before{content:"\E1B8"}.material-icons.museum:before{content:"\EA36"}.material-icons.music_note:before{content:"\E405"}.material-icons.music_off:before{content:"\E440"}.material-icons.music_video:before{content:"\E063"}.material-icons.my_library_add:before{content:"\E02E"}.material-icons.my_library_books:before{content:"\E02F"}.material-icons.my_library_music:before{content:"\E030"}.material-icons.my_location:before{content:"\E55C"}.material-icons.nature:before{content:"\E406"}.material-icons.nature_people:before{content:"\E407"}.material-icons.navigate_before:before{content:"\E408"}.material-icons.navigate_next:before{content:"\E409"}.material-icons.navigation:before{content:"\E55D"}.material-icons.near_me:before{content:"\E569"}.material-icons.network_cell:before{content:"\E1B9"}.material-icons.network_check:before{content:"\E640"}.material-icons.network_locked:before{content:"\E61A"}.material-icons.network_wifi:before{content:"\E1BA"}.material-icons.new_releases:before{content:"\E031"}.material-icons.next_week:before{content:"\E16A"}.material-icons.nfc:before{content:"\E1BB"}.material-icons.nightlife:before{content:"\EA62"}.material-icons.nights_stay:before{content:"\EA46"}.material-icons.no_encryption:before{content:"\E641"}.material-icons.no_meeting_room:before{content:"\EB4E"}.material-icons.no_sim:before{content:"\E0CC"}.material-icons.not_interested:before{content:"\E033"}.material-icons.not_listed_location:before{content:"\E575"}.material-icons.note:before{content:"\E06F"}.material-icons.note_add:before{content:"\E89C"}.material-icons.notes:before{content:"\E26C"}.material-icons.notification_important:before{content:"\E004"}.material-icons.notifications:before{content:"\E7F4"}.material-icons.notifications_active:before{content:"\E7F7"}.material-icons.notifications_none:before{content:"\E7F5"}.material-icons.notifications_off:before{content:"\E7F6"}.material-icons.notifications_on:before{content:"\E7F7"}.material-icons.notifications_paused:before{content:"\E7F8"}.material-icons.now_wallpaper:before{content:"\E1BC"}.material-icons.now_widgets:before{content:"\E1BD"}.material-icons.offline_bolt:before{content:"\E932"}.material-icons.offline_pin:before{content:"\E90A"}.material-icons.offline_share:before{content:"\E9C5"}.material-icons.ondemand_video:before{content:"\E63A"}.material-icons.opacity:before{content:"\E91C"}.material-icons.open_in_browser:before{content:"\E89D"}.material-icons.open_in_new:before{content:"\E89E"}.material-icons.open_with:before{content:"\E89F"}.material-icons.outdoor_grill:before{content:"\EA47"}.material-icons.outlined_flag:before{content:"\E16E"}.material-icons.padding:before{content:"\E9C8"}.material-icons.pages:before{content:"\E7F9"}.material-icons.pageview:before{content:"\E8A0"}.material-icons.palette:before{content:"\E40A"}.material-icons.pan_tool:before{content:"\E925"}.material-icons.panorama:before{content:"\E40B"}.material-icons.panorama_fish_eye:before,.material-icons.panorama_fisheye:before{content:"\E40C"}.material-icons.panorama_horizontal:before{content:"\E40D"}.material-icons.panorama_photosphere:before{content:"\E9C9"}.material-icons.panorama_photosphere_select:before{content:"\E9CA"}.material-icons.panorama_vertical:before{content:"\E40E"}.material-icons.panorama_wide_angle:before{content:"\E40F"}.material-icons.park:before{content:"\EA63"}.material-icons.party_mode:before{content:"\E7FA"}.material-icons.pause:before{content:"\E034"}.material-icons.pause_circle_filled:before{content:"\E035"}.material-icons.pause_circle_outline:before{content:"\E036"}.material-icons.pause_presentation:before{content:"\E0EA"}.material-icons.payment:before{content:"\E8A1"}.material-icons.people:before{content:"\E7FB"}.material-icons.people_alt:before{content:"\EA21"}.material-icons.people_outline:before{content:"\E7FC"}.material-icons.perm_camera_mic:before{content:"\E8A2"}.material-icons.perm_contact_cal:before,.material-icons.perm_contact_calendar:before{content:"\E8A3"}.material-icons.perm_data_setting:before{content:"\E8A4"}.material-icons.perm_device_info:before,.material-icons.perm_device_information:before{content:"\E8A5"}.material-icons.perm_identity:before{content:"\E8A6"}.material-icons.perm_media:before{content:"\E8A7"}.material-icons.perm_phone_msg:before{content:"\E8A8"}.material-icons.perm_scan_wifi:before{content:"\E8A9"}.material-icons.person:before{content:"\E7FD"}.material-icons.person_add:before{content:"\E7FE"}.material-icons.person_add_disabled:before{content:"\E9CB"}.material-icons.person_outline:before{content:"\E7FF"}.material-icons.person_pin:before{content:"\E55A"}.material-icons.person_pin_circle:before{content:"\E56A"}.material-icons.personal_video:before{content:"\E63B"}.material-icons.pets:before{content:"\E91D"}.material-icons.phone:before{content:"\E0CD"}.material-icons.phone_android:before{content:"\E324"}.material-icons.phone_bluetooth_speaker:before{content:"\E61B"}.material-icons.phone_callback:before{content:"\E649"}.material-icons.phone_disabled:before{content:"\E9CC"}.material-icons.phone_enabled:before{content:"\E9CD"}.material-icons.phone_forwarded:before{content:"\E61C"}.material-icons.phone_in_talk:before{content:"\E61D"}.material-icons.phone_iphone:before{content:"\E325"}.material-icons.phone_locked:before{content:"\E61E"}.material-icons.phone_missed:before{content:"\E61F"}.material-icons.phone_paused:before{content:"\E620"}.material-icons.phonelink:before{content:"\E326"}.material-icons.phonelink_erase:before{content:"\E0DB"}.material-icons.phonelink_lock:before{content:"\E0DC"}.material-icons.phonelink_off:before{content:"\E327"}.material-icons.phonelink_ring:before{content:"\E0DD"}.material-icons.phonelink_setup:before{content:"\E0DE"}.material-icons.photo:before{content:"\E410"}.material-icons.photo_album:before{content:"\E411"}.material-icons.photo_camera:before{content:"\E412"}.material-icons.photo_filter:before{content:"\E43B"}.material-icons.photo_library:before{content:"\E413"}.material-icons.photo_size_select_actual:before{content:"\E432"}.material-icons.photo_size_select_large:before{content:"\E433"}.material-icons.photo_size_select_small:before{content:"\E434"}.material-icons.picture_as_pdf:before{content:"\E415"}.material-icons.picture_in_picture:before{content:"\E8AA"}.material-icons.picture_in_picture_alt:before{content:"\E911"}.material-icons.pie_chart:before{content:"\E6C4"}.material-icons.pie_chart_outlined:before{content:"\E6C5"}.material-icons.pin_drop:before{content:"\E55E"}.material-icons.pivot_table_chart:before{content:"\E9CE"}.material-icons.place:before{content:"\E55F"}.material-icons.play_arrow:before{content:"\E037"}.material-icons.play_circle_fill:before,.material-icons.play_circle_filled:before{content:"\E038"}.material-icons.play_circle_outline:before{content:"\E039"}.material-icons.play_for_work:before{content:"\E906"}.material-icons.playlist_add:before{content:"\E03B"}.material-icons.playlist_add_check:before{content:"\E065"}.material-icons.playlist_play:before{content:"\E05F"}.material-icons.plus_one:before{content:"\E800"}.material-icons.policy:before{content:"\EA17"}.material-icons.poll:before{content:"\E801"}.material-icons.polymer:before{content:"\E8AB"}.material-icons.pool:before{content:"\EB48"}.material-icons.portable_wifi_off:before{content:"\E0CE"}.material-icons.portrait:before{content:"\E416"}.material-icons.post_add:before{content:"\EA20"}.material-icons.power:before{content:"\E63C"}.material-icons.power_input:before{content:"\E336"}.material-icons.power_off:before{content:"\E646"}.material-icons.power_settings_new:before{content:"\E8AC"}.material-icons.pregnant_woman:before{content:"\E91E"}.material-icons.present_to_all:before{content:"\E0DF"}.material-icons.print:before{content:"\E8AD"}.material-icons.print_disabled:before{content:"\E9CF"}.material-icons.priority_high:before{content:"\E645"}.material-icons.public:before{content:"\E80B"}.material-icons.publish:before{content:"\E255"}.material-icons.query_builder:before{content:"\E8AE"}.material-icons.question_answer:before{content:"\E8AF"}.material-icons.queue:before{content:"\E03C"}.material-icons.queue_music:before{content:"\E03D"}.material-icons.queue_play_next:before{content:"\E066"}.material-icons.quick_contacts_dialer:before{content:"\E0CF"}.material-icons.quick_contacts_mail:before{content:"\E0D0"}.material-icons.radio:before{content:"\E03E"}.material-icons.radio_button_checked:before{content:"\E837"}.material-icons.radio_button_off:before{content:"\E836"}.material-icons.radio_button_on:before{content:"\E837"}.material-icons.radio_button_unchecked:before{content:"\E836"}.material-icons.railway_alert:before{content:"\E9D1"}.material-icons.ramen_dining:before{content:"\EA64"}.material-icons.rate_review:before{content:"\E560"}.material-icons.receipt:before{content:"\E8B0"}.material-icons.recent_actors:before{content:"\E03F"}.material-icons.recommend:before{content:"\E9D2"}.material-icons.record_voice_over:before{content:"\E91F"}.material-icons.redeem:before{content:"\E8B1"}.material-icons.redo:before{content:"\E15A"}.material-icons.refresh:before{content:"\E5D5"}.material-icons.remove:before{content:"\E15B"}.material-icons.remove_circle:before{content:"\E15C"}.material-icons.remove_circle_outline:before{content:"\E15D"}.material-icons.remove_done:before{content:"\E9D3"}.material-icons.remove_from_queue:before{content:"\E067"}.material-icons.remove_moderator:before{content:"\E9D4"}.material-icons.remove_red_eye:before{content:"\E417"}.material-icons.remove_shopping_cart:before{content:"\E928"}.material-icons.reorder:before{content:"\E8FE"}.material-icons.repeat:before{content:"\E040"}.material-icons.repeat_on:before{content:"\E9D6"}.material-icons.repeat_one:before{content:"\E041"}.material-icons.repeat_one_on:before{content:"\E9D7"}.material-icons.replay:before{content:"\E042"}.material-icons.replay_10:before{content:"\E059"}.material-icons.replay_30:before{content:"\E05A"}.material-icons.replay_5:before{content:"\E05B"}.material-icons.replay_circle_filled:before{content:"\E9D8"}.material-icons.reply:before{content:"\E15E"}.material-icons.reply_all:before{content:"\E15F"}.material-icons.report:before{content:"\E160"}.material-icons.report_off:before{content:"\E170"}.material-icons.report_problem:before{content:"\E8B2"}.material-icons.reset_tv:before{content:"\E9D9"}.material-icons.restaurant:before{content:"\E56C"}.material-icons.restaurant_menu:before{content:"\E561"}.material-icons.restore:before{content:"\E8B3"}.material-icons.restore_from_trash:before{content:"\E938"}.material-icons.restore_page:before{content:"\E929"}.material-icons.ring_volume:before{content:"\E0D1"}.material-icons.room:before{content:"\E8B4"}.material-icons.room_service:before{content:"\EB49"}.material-icons.rotate_90_degrees_ccw:before{content:"\E418"}.material-icons.rotate_left:before{content:"\E419"}.material-icons.rotate_right:before{content:"\E41A"}.material-icons.rounded_corner:before{content:"\E920"}.material-icons.router:before{content:"\E328"}.material-icons.rowing:before{content:"\E921"}.material-icons.rss_feed:before{content:"\E0E5"}.material-icons.rtt:before{content:"\E9AD"}.material-icons.rv_hookup:before{content:"\E642"}.material-icons.satellite:before{content:"\E562"}.material-icons.save:before{content:"\E161"}.material-icons.save_alt:before{content:"\E171"}.material-icons.saved_search:before{content:"\EA11"}.material-icons.scanner:before{content:"\E329"}.material-icons.scatter_plot:before{content:"\E268"}.material-icons.schedule:before{content:"\E8B5"}.material-icons.schedule_send:before{content:"\EA0A"}.material-icons.school:before{content:"\E80C"}.material-icons.score:before{content:"\E269"}.material-icons.screen_lock_landscape:before{content:"\E1BE"}.material-icons.screen_lock_portrait:before{content:"\E1BF"}.material-icons.screen_lock_rotation:before{content:"\E1C0"}.material-icons.screen_rotation:before{content:"\E1C1"}.material-icons.screen_share:before{content:"\E0E2"}.material-icons.sd:before{content:"\E9DD"}.material-icons.sd_card:before{content:"\E623"}.material-icons.sd_storage:before{content:"\E1C2"}.material-icons.search:before{content:"\E8B6"}.material-icons.security:before{content:"\E32A"}.material-icons.segment:before{content:"\E94B"}.material-icons.select_all:before{content:"\E162"}.material-icons.send:before{content:"\E163"}.material-icons.send_and_archive:before{content:"\EA0C"}.material-icons.sentiment_dissatisfied:before{content:"\E811"}.material-icons.sentiment_neutral:before{content:"\E812"}.material-icons.sentiment_satisfied:before{content:"\E813"}.material-icons.sentiment_satisfied_alt:before{content:"\E0ED"}.material-icons.sentiment_very_dissatisfied:before{content:"\E814"}.material-icons.sentiment_very_satisfied:before{content:"\E815"}.material-icons.settings:before{content:"\E8B8"}.material-icons.settings_applications:before{content:"\E8B9"}.material-icons.settings_backup_restore:before{content:"\E8BA"}.material-icons.settings_bluetooth:before{content:"\E8BB"}.material-icons.settings_brightness:before{content:"\E8BD"}.material-icons.settings_cell:before{content:"\E8BC"}.material-icons.settings_display:before{content:"\E8BD"}.material-icons.settings_ethernet:before{content:"\E8BE"}.material-icons.settings_input_antenna:before{content:"\E8BF"}.material-icons.settings_input_component:before{content:"\E8C0"}.material-icons.settings_input_composite:before{content:"\E8C1"}.material-icons.settings_input_hdmi:before{content:"\E8C2"}.material-icons.settings_input_svideo:before{content:"\E8C3"}.material-icons.settings_overscan:before{content:"\E8C4"}.material-icons.settings_phone:before{content:"\E8C5"}.material-icons.settings_power:before{content:"\E8C6"}.material-icons.settings_remote:before{content:"\E8C7"}.material-icons.settings_system_daydream:before{content:"\E1C3"}.material-icons.settings_voice:before{content:"\E8C8"}.material-icons.share:before{content:"\E80D"}.material-icons.shield:before{content:"\E9E0"}.material-icons.shop:before{content:"\E8C9"}.material-icons.shop_two:before{content:"\E8CA"}.material-icons.shopping_basket:before{content:"\E8CB"}.material-icons.shopping_cart:before{content:"\E8CC"}.material-icons.short_text:before{content:"\E261"}.material-icons.show_chart:before{content:"\E6E1"}.material-icons.shuffle:before{content:"\E043"}.material-icons.shuffle_on:before{content:"\E9E1"}.material-icons.shutter_speed:before{content:"\E43D"}.material-icons.signal_cellular_4_bar:before{content:"\E1C8"}.material-icons.signal_cellular_alt:before{content:"\E202"}.material-icons.signal_cellular_connected_no_internet_4_bar:before{content:"\E1CD"}.material-icons.signal_cellular_no_sim:before{content:"\E1CE"}.material-icons.signal_cellular_null:before{content:"\E1CF"}.material-icons.signal_cellular_off:before{content:"\E1D0"}.material-icons.signal_wifi_4_bar:before{content:"\E1D8"}.material-icons.signal_wifi_4_bar_lock:before{content:"\E1D9"}.material-icons.signal_wifi_off:before{content:"\E1DA"}.material-icons.sim_card:before{content:"\E32B"}.material-icons.sim_card_alert:before{content:"\E624"}.material-icons.single_bed:before{content:"\EA48"}.material-icons.skip_next:before{content:"\E044"}.material-icons.skip_previous:before{content:"\E045"}.material-icons.slideshow:before{content:"\E41B"}.material-icons.slow_motion_video:before{content:"\E068"}.material-icons.smartphone:before{content:"\E32C"}.material-icons.smoke_free:before{content:"\EB4A"}.material-icons.smoking_rooms:before{content:"\EB4B"}.material-icons.sms:before{content:"\E625"}.material-icons.sms_failed:before{content:"\E626"}.material-icons.snooze:before{content:"\E046"}.material-icons.sort:before{content:"\E164"}.material-icons.sort_by_alpha:before{content:"\E053"}.material-icons.spa:before{content:"\EB4C"}.material-icons.space_bar:before{content:"\E256"}.material-icons.speaker:before{content:"\E32D"}.material-icons.speaker_group:before{content:"\E32E"}.material-icons.speaker_notes:before{content:"\E8CD"}.material-icons.speaker_notes_off:before{content:"\E92A"}.material-icons.speaker_phone:before{content:"\E0D2"}.material-icons.speed:before{content:"\E9E4"}.material-icons.spellcheck:before{content:"\E8CE"}.material-icons.sports:before{content:"\EA30"}.material-icons.sports_baseball:before{content:"\EA51"}.material-icons.sports_basketball:before{content:"\EA26"}.material-icons.sports_cricket:before{content:"\EA27"}.material-icons.sports_esports:before{content:"\EA28"}.material-icons.sports_football:before{content:"\EA29"}.material-icons.sports_golf:before{content:"\EA2A"}.material-icons.sports_handball:before{content:"\EA33"}.material-icons.sports_hockey:before{content:"\EA2B"}.material-icons.sports_kabaddi:before{content:"\EA34"}.material-icons.sports_mma:before{content:"\EA2C"}.material-icons.sports_motorsports:before{content:"\EA2D"}.material-icons.sports_rugby:before{content:"\EA2E"}.material-icons.sports_soccer:before{content:"\EA2F"}.material-icons.sports_tennis:before{content:"\EA32"}.material-icons.sports_volleyball:before{content:"\EA31"}.material-icons.square_foot:before{content:"\EA49"}.material-icons.stacked_bar_chart:before{content:"\E9E6"}.material-icons.star:before{content:"\E838"}.material-icons.star_border:before{content:"\E83A"}.material-icons.star_half:before{content:"\E839"}.material-icons.star_outline:before{content:"\E83A"}.material-icons.stars:before{content:"\E8D0"}.material-icons.stay_current_landscape:before{content:"\E0D3"}.material-icons.stay_current_portrait:before{content:"\E0D4"}.material-icons.stay_primary_landscape:before{content:"\E0D5"}.material-icons.stay_primary_portrait:before{content:"\E0D6"}.material-icons.stop:before{content:"\E047"}.material-icons.stop_screen_share:before{content:"\E0E3"}.material-icons.storage:before{content:"\E1DB"}.material-icons.store:before{content:"\E8D1"}.material-icons.store_mall_directory:before{content:"\E563"}.material-icons.storefront:before{content:"\EA12"}.material-icons.straighten:before{content:"\E41C"}.material-icons.stream:before{content:"\E9E9"}.material-icons.streetview:before{content:"\E56E"}.material-icons.strikethrough_s:before{content:"\E257"}.material-icons.style:before{content:"\E41D"}.material-icons.subdirectory_arrow_left:before{content:"\E5D9"}.material-icons.subdirectory_arrow_right:before{content:"\E5DA"}.material-icons.subject:before{content:"\E8D2"}.material-icons.subscriptions:before{content:"\E064"}.material-icons.subtitles:before{content:"\E048"}.material-icons.subway:before{content:"\E56F"}.material-icons.supervised_user_circle:before{content:"\E939"}.material-icons.supervisor_account:before{content:"\E8D3"}.material-icons.surround_sound:before{content:"\E049"}.material-icons.swap_calls:before{content:"\E0D7"}.material-icons.swap_horiz:before{content:"\E8D4"}.material-icons.swap_horizontal_circle:before{content:"\E933"}.material-icons.swap_vert:before{content:"\E8D5"}.material-icons.swap_vert_circle:before,.material-icons.swap_vertical_circle:before{content:"\E8D6"}.material-icons.swipe:before{content:"\E9EC"}.material-icons.switch_account:before{content:"\E9ED"}.material-icons.switch_camera:before{content:"\E41E"}.material-icons.switch_video:before{content:"\E41F"}.material-icons.sync:before{content:"\E627"}.material-icons.sync_alt:before{content:"\EA18"}.material-icons.sync_disabled:before{content:"\E628"}.material-icons.sync_problem:before{content:"\E629"}.material-icons.system_update:before{content:"\E62A"}.material-icons.system_update_alt:before,.material-icons.system_update_tv:before{content:"\E8D7"}.material-icons.tab:before{content:"\E8D8"}.material-icons.tab_unselected:before{content:"\E8D9"}.material-icons.table_chart:before{content:"\E265"}.material-icons.tablet:before{content:"\E32F"}.material-icons.tablet_android:before{content:"\E330"}.material-icons.tablet_mac:before{content:"\E331"}.material-icons.tag:before{content:"\E9EF"}.material-icons.tag_faces:before{content:"\E420"}.material-icons.takeout_dining:before{content:"\EA74"}.material-icons.tap_and_play:before{content:"\E62B"}.material-icons.terrain:before{content:"\E564"}.material-icons.text_fields:before{content:"\E262"}.material-icons.text_format:before{content:"\E165"}.material-icons.text_rotate_up:before{content:"\E93A"}.material-icons.text_rotate_vertical:before{content:"\E93B"}.material-icons.text_rotation_angledown:before{content:"\E93C"}.material-icons.text_rotation_angleup:before{content:"\E93D"}.material-icons.text_rotation_down:before{content:"\E93E"}.material-icons.text_rotation_none:before{content:"\E93F"}.material-icons.textsms:before{content:"\E0D8"}.material-icons.texture:before{content:"\E421"}.material-icons.theater_comedy:before{content:"\EA66"}.material-icons.theaters:before{content:"\E8DA"}.material-icons.thumb_down:before{content:"\E8DB"}.material-icons.thumb_down_alt:before{content:"\E816"}.material-icons.thumb_down_off_alt:before{content:"\E9F2"}.material-icons.thumb_up:before{content:"\E8DC"}.material-icons.thumb_up_alt:before{content:"\E817"}.material-icons.thumb_up_off_alt:before{content:"\E9F3"}.material-icons.thumbs_up_down:before{content:"\E8DD"}.material-icons.time_to_leave:before{content:"\E62C"}.material-icons.timelapse:before{content:"\E422"}.material-icons.timeline:before{content:"\E922"}.material-icons.timer:before{content:"\E425"}.material-icons.timer_10:before{content:"\E423"}.material-icons.timer_3:before{content:"\E424"}.material-icons.timer_off:before{content:"\E426"}.material-icons.title:before{content:"\E264"}.material-icons.toc:before{content:"\E8DE"}.material-icons.today:before{content:"\E8DF"}.material-icons.toggle_off:before{content:"\E9F5"}.material-icons.toggle_on:before{content:"\E9F6"}.material-icons.toll:before{content:"\E8E0"}.material-icons.tonality:before{content:"\E427"}.material-icons.touch_app:before{content:"\E913"}.material-icons.toys:before{content:"\E332"}.material-icons.track_changes:before{content:"\E8E1"}.material-icons.traffic:before{content:"\E565"}.material-icons.train:before{content:"\E570"}.material-icons.tram:before{content:"\E571"}.material-icons.transfer_within_a_station:before{content:"\E572"}.material-icons.transform:before{content:"\E428"}.material-icons.transit_enterexit:before{content:"\E579"}.material-icons.translate:before{content:"\E8E2"}.material-icons.trending_down:before{content:"\E8E3"}.material-icons.trending_flat:before,.material-icons.trending_neutral:before{content:"\E8E4"}.material-icons.trending_up:before{content:"\E8E5"}.material-icons.trip_origin:before{content:"\E57B"}.material-icons.tune:before{content:"\E429"}.material-icons.turned_in:before{content:"\E8E6"}.material-icons.turned_in_not:before{content:"\E8E7"}.material-icons.tv:before{content:"\E333"}.material-icons.tv_off:before{content:"\E647"}.material-icons.two_wheeler:before{content:"\E9F9"}.material-icons.unarchive:before{content:"\E169"}.material-icons.undo:before{content:"\E166"}.material-icons.unfold_less:before{content:"\E5D6"}.material-icons.unfold_more:before{content:"\E5D7"}.material-icons.unsubscribe:before{content:"\E0EB"}.material-icons.update:before{content:"\E923"}.material-icons.upload_file:before{content:"\E9FC"}.material-icons.usb:before{content:"\E1E0"}.material-icons.verified_user:before{content:"\E8E8"}.material-icons.vertical_align_bottom:before{content:"\E258"}.material-icons.vertical_align_center:before{content:"\E259"}.material-icons.vertical_align_top:before{content:"\E25A"}.material-icons.vertical_split:before{content:"\E949"}.material-icons.vibration:before{content:"\E62D"}.material-icons.video_call:before{content:"\E070"}.material-icons.video_collection:before{content:"\E04A"}.material-icons.video_label:before{content:"\E071"}.material-icons.video_library:before{content:"\E04A"}.material-icons.videocam:before{content:"\E04B"}.material-icons.videocam_off:before{content:"\E04C"}.material-icons.videogame_asset:before{content:"\E338"}.material-icons.view_agenda:before{content:"\E8E9"}.material-icons.view_array:before{content:"\E8EA"}.material-icons.view_carousel:before{content:"\E8EB"}.material-icons.view_column:before{content:"\E8EC"}.material-icons.view_comfortable:before,.material-icons.view_comfy:before{content:"\E42A"}.material-icons.view_compact:before{content:"\E42B"}.material-icons.view_day:before{content:"\E8ED"}.material-icons.view_headline:before{content:"\E8EE"}.material-icons.view_in_ar:before{content:"\E9FE"}.material-icons.view_list:before{content:"\E8EF"}.material-icons.view_module:before{content:"\E8F0"}.material-icons.view_quilt:before{content:"\E8F1"}.material-icons.view_stream:before{content:"\E8F2"}.material-icons.view_week:before{content:"\E8F3"}.material-icons.vignette:before{content:"\E435"}.material-icons.visibility:before{content:"\E8F4"}.material-icons.visibility_off:before{content:"\E8F5"}.material-icons.voice_chat:before{content:"\E62E"}.material-icons.voice_over_off:before{content:"\E94A"}.material-icons.voicemail:before{content:"\E0D9"}.material-icons.volume_down:before{content:"\E04D"}.material-icons.volume_mute:before{content:"\E04E"}.material-icons.volume_off:before{content:"\E04F"}.material-icons.volume_up:before{content:"\E050"}.material-icons.volunteer_activism:before{content:"\EA70"}.material-icons.vpn_key:before{content:"\E0DA"}.material-icons.vpn_lock:before{content:"\E62F"}.material-icons.wallet_giftcard:before{content:"\E8F6"}.material-icons.wallet_membership:before{content:"\E8F7"}.material-icons.wallet_travel:before{content:"\E8F8"}.material-icons.wallpaper:before{content:"\E1BC"}.material-icons.warning:before{content:"\E002"}.material-icons.watch:before{content:"\E334"}.material-icons.watch_later:before{content:"\E924"}.material-icons.waterfall_chart:before{content:"\EA00"}.material-icons.waves:before{content:"\E176"}.material-icons.wb_auto:before{content:"\E42C"}.material-icons.wb_cloudy:before{content:"\E42D"}.material-icons.wb_incandescent:before{content:"\E42E"}.material-icons.wb_iridescent:before{content:"\E436"}.material-icons.wb_shade:before{content:"\EA01"}.material-icons.wb_sunny:before{content:"\E430"}.material-icons.wb_twighlight:before{content:"\EA02"}.material-icons.wc:before{content:"\E63D"}.material-icons.web:before{content:"\E051"}.material-icons.web_asset:before{content:"\E069"}.material-icons.weekend:before{content:"\E16B"}.material-icons.whatshot:before{content:"\E80E"}.material-icons.where_to_vote:before{content:"\E177"}.material-icons.widgets:before{content:"\E1BD"}.material-icons.wifi:before{content:"\E63E"}.material-icons.wifi_lock:before{content:"\E1E1"}.material-icons.wifi_off:before{content:"\E648"}.material-icons.wifi_tethering:before{content:"\E1E2"}.material-icons.work:before{content:"\E8F9"}.material-icons.work_off:before{content:"\E942"}.material-icons.work_outline:before{content:"\E943"}.material-icons.workspaces_filled:before{content:"\EA0D"}.material-icons.workspaces_outline:before{content:"\EA0F"}.material-icons.wrap_text:before{content:"\E25B"}.material-icons.youtube_searched_for:before{content:"\E8FA"}.material-icons.zoom_in:before{content:"\E8FF"}.material-icons.zoom_out:before{content:"\E900"}.material-icons.zoom_out_map:before{content:"\E56B"}@-webkit-keyframes v-shake{59%{margin-left:0}60%,80%{margin-left:2px}70%,90%{margin-left:-2px}}@keyframes v-shake{59%{margin-left:0}60%,80%{margin-left:2px}70%,90%{margin-left:-2px}}.v-application .black{background-color:#000!important;border-color:#000!important}.v-application .black--text{color:#000!important;caret-color:#000!important}.v-application .white{background-color:#fff!important;border-color:#fff!important}.v-application .white--text{color:#fff!important;caret-color:#fff!important}.v-application .transparent{background-color:transparent!important;border-color:transparent!important}.v-application .transparent--text{color:transparent!important;caret-color:transparent!important}.v-application .red{background-color:#f44336!important;border-color:#f44336!important}.v-application .red--text{color:#f44336!important;caret-color:#f44336!important}.v-application .red.lighten-5{background-color:#ffebee!important;border-color:#ffebee!important}.v-application .red--text.text--lighten-5{color:#ffebee!important;caret-color:#ffebee!important}.v-application .red.lighten-4{background-color:#ffcdd2!important;border-color:#ffcdd2!important}.v-application .red--text.text--lighten-4{color:#ffcdd2!important;caret-color:#ffcdd2!important}.v-application .red.lighten-3{background-color:#ef9a9a!important;border-color:#ef9a9a!important}.v-application .red--text.text--lighten-3{color:#ef9a9a!important;caret-color:#ef9a9a!important}.v-application .red.lighten-2{background-color:#e57373!important;border-color:#e57373!important}.v-application .red--text.text--lighten-2{color:#e57373!important;caret-color:#e57373!important}.v-application .red.lighten-1{background-color:#ef5350!important;border-color:#ef5350!important}.v-application .red--text.text--lighten-1{color:#ef5350!important;caret-color:#ef5350!important}.v-application .red.darken-1{background-color:#e53935!important;border-color:#e53935!important}.v-application .red--text.text--darken-1{color:#e53935!important;caret-color:#e53935!important}.v-application .red.darken-2{background-color:#d32f2f!important;border-color:#d32f2f!important}.v-application .red--text.text--darken-2{color:#d32f2f!important;caret-color:#d32f2f!important}.v-application .red.darken-3{background-color:#c62828!important;border-color:#c62828!important}.v-application .red--text.text--darken-3{color:#c62828!important;caret-color:#c62828!important}.v-application .red.darken-4{background-color:#b71c1c!important;border-color:#b71c1c!important}.v-application .red--text.text--darken-4{color:#b71c1c!important;caret-color:#b71c1c!important}.v-application .red.accent-1{background-color:#ff8a80!important;border-color:#ff8a80!important}.v-application .red--text.text--accent-1{color:#ff8a80!important;caret-color:#ff8a80!important}.v-application .red.accent-2{background-color:#ff5252!important;border-color:#ff5252!important}.v-application .red--text.text--accent-2{color:#ff5252!important;caret-color:#ff5252!important}.v-application .red.accent-3{background-color:#ff1744!important;border-color:#ff1744!important}.v-application .red--text.text--accent-3{color:#ff1744!important;caret-color:#ff1744!important}.v-application .red.accent-4{background-color:#d50000!important;border-color:#d50000!important}.v-application .red--text.text--accent-4{color:#d50000!important;caret-color:#d50000!important}.v-application .pink{background-color:#e91e63!important;border-color:#e91e63!important}.v-application .pink--text{color:#e91e63!important;caret-color:#e91e63!important}.v-application .pink.lighten-5{background-color:#fce4ec!important;border-color:#fce4ec!important}.v-application .pink--text.text--lighten-5{color:#fce4ec!important;caret-color:#fce4ec!important}.v-application .pink.lighten-4{background-color:#f8bbd0!important;border-color:#f8bbd0!important}.v-application .pink--text.text--lighten-4{color:#f8bbd0!important;caret-color:#f8bbd0!important}.v-application .pink.lighten-3{background-color:#f48fb1!important;border-color:#f48fb1!important}.v-application .pink--text.text--lighten-3{color:#f48fb1!important;caret-color:#f48fb1!important}.v-application .pink.lighten-2{background-color:#f06292!important;border-color:#f06292!important}.v-application .pink--text.text--lighten-2{color:#f06292!important;caret-color:#f06292!important}.v-application .pink.lighten-1{background-color:#ec407a!important;border-color:#ec407a!important}.v-application .pink--text.text--lighten-1{color:#ec407a!important;caret-color:#ec407a!important}.v-application .pink.darken-1{background-color:#d81b60!important;border-color:#d81b60!important}.v-application .pink--text.text--darken-1{color:#d81b60!important;caret-color:#d81b60!important}.v-application .pink.darken-2{background-color:#c2185b!important;border-color:#c2185b!important}.v-application .pink--text.text--darken-2{color:#c2185b!important;caret-color:#c2185b!important}.v-application .pink.darken-3{background-color:#ad1457!important;border-color:#ad1457!important}.v-application .pink--text.text--darken-3{color:#ad1457!important;caret-color:#ad1457!important}.v-application .pink.darken-4{background-color:#880e4f!important;border-color:#880e4f!important}.v-application .pink--text.text--darken-4{color:#880e4f!important;caret-color:#880e4f!important}.v-application .pink.accent-1{background-color:#ff80ab!important;border-color:#ff80ab!important}.v-application .pink--text.text--accent-1{color:#ff80ab!important;caret-color:#ff80ab!important}.v-application .pink.accent-2{background-color:#ff4081!important;border-color:#ff4081!important}.v-application .pink--text.text--accent-2{color:#ff4081!important;caret-color:#ff4081!important}.v-application .pink.accent-3{background-color:#f50057!important;border-color:#f50057!important}.v-application .pink--text.text--accent-3{color:#f50057!important;caret-color:#f50057!important}.v-application .pink.accent-4{background-color:#c51162!important;border-color:#c51162!important}.v-application .pink--text.text--accent-4{color:#c51162!important;caret-color:#c51162!important}.v-application .purple{background-color:#9c27b0!important;border-color:#9c27b0!important}.v-application .purple--text{color:#9c27b0!important;caret-color:#9c27b0!important}.v-application .purple.lighten-5{background-color:#f3e5f5!important;border-color:#f3e5f5!important}.v-application .purple--text.text--lighten-5{color:#f3e5f5!important;caret-color:#f3e5f5!important}.v-application .purple.lighten-4{background-color:#e1bee7!important;border-color:#e1bee7!important}.v-application .purple--text.text--lighten-4{color:#e1bee7!important;caret-color:#e1bee7!important}.v-application .purple.lighten-3{background-color:#ce93d8!important;border-color:#ce93d8!important}.v-application .purple--text.text--lighten-3{color:#ce93d8!important;caret-color:#ce93d8!important}.v-application .purple.lighten-2{background-color:#ba68c8!important;border-color:#ba68c8!important}.v-application .purple--text.text--lighten-2{color:#ba68c8!important;caret-color:#ba68c8!important}.v-application .purple.lighten-1{background-color:#ab47bc!important;border-color:#ab47bc!important}.v-application .purple--text.text--lighten-1{color:#ab47bc!important;caret-color:#ab47bc!important}.v-application .purple.darken-1{background-color:#8e24aa!important;border-color:#8e24aa!important}.v-application .purple--text.text--darken-1{color:#8e24aa!important;caret-color:#8e24aa!important}.v-application .purple.darken-2{background-color:#7b1fa2!important;border-color:#7b1fa2!important}.v-application .purple--text.text--darken-2{color:#7b1fa2!important;caret-color:#7b1fa2!important}.v-application .purple.darken-3{background-color:#6a1b9a!important;border-color:#6a1b9a!important}.v-application .purple--text.text--darken-3{color:#6a1b9a!important;caret-color:#6a1b9a!important}.v-application .purple.darken-4{background-color:#4a148c!important;border-color:#4a148c!important}.v-application .purple--text.text--darken-4{color:#4a148c!important;caret-color:#4a148c!important}.v-application .purple.accent-1{background-color:#ea80fc!important;border-color:#ea80fc!important}.v-application .purple--text.text--accent-1{color:#ea80fc!important;caret-color:#ea80fc!important}.v-application .purple.accent-2{background-color:#e040fb!important;border-color:#e040fb!important}.v-application .purple--text.text--accent-2{color:#e040fb!important;caret-color:#e040fb!important}.v-application .purple.accent-3{background-color:#d500f9!important;border-color:#d500f9!important}.v-application .purple--text.text--accent-3{color:#d500f9!important;caret-color:#d500f9!important}.v-application .purple.accent-4{background-color:#a0f!important;border-color:#a0f!important}.v-application .purple--text.text--accent-4{color:#a0f!important;caret-color:#a0f!important}.v-application .deep-purple{background-color:#673ab7!important;border-color:#673ab7!important}.v-application .deep-purple--text{color:#673ab7!important;caret-color:#673ab7!important}.v-application .deep-purple.lighten-5{background-color:#ede7f6!important;border-color:#ede7f6!important}.v-application .deep-purple--text.text--lighten-5{color:#ede7f6!important;caret-color:#ede7f6!important}.v-application .deep-purple.lighten-4{background-color:#d1c4e9!important;border-color:#d1c4e9!important}.v-application .deep-purple--text.text--lighten-4{color:#d1c4e9!important;caret-color:#d1c4e9!important}.v-application .deep-purple.lighten-3{background-color:#b39ddb!important;border-color:#b39ddb!important}.v-application .deep-purple--text.text--lighten-3{color:#b39ddb!important;caret-color:#b39ddb!important}.v-application .deep-purple.lighten-2{background-color:#9575cd!important;border-color:#9575cd!important}.v-application .deep-purple--text.text--lighten-2{color:#9575cd!important;caret-color:#9575cd!important}.v-application .deep-purple.lighten-1{background-color:#7e57c2!important;border-color:#7e57c2!important}.v-application .deep-purple--text.text--lighten-1{color:#7e57c2!important;caret-color:#7e57c2!important}.v-application .deep-purple.darken-1{background-color:#5e35b1!important;border-color:#5e35b1!important}.v-application .deep-purple--text.text--darken-1{color:#5e35b1!important;caret-color:#5e35b1!important}.v-application .deep-purple.darken-2{background-color:#512da8!important;border-color:#512da8!important}.v-application .deep-purple--text.text--darken-2{color:#512da8!important;caret-color:#512da8!important}.v-application .deep-purple.darken-3{background-color:#4527a0!important;border-color:#4527a0!important}.v-application .deep-purple--text.text--darken-3{color:#4527a0!important;caret-color:#4527a0!important}.v-application .deep-purple.darken-4{background-color:#311b92!important;border-color:#311b92!important}.v-application .deep-purple--text.text--darken-4{color:#311b92!important;caret-color:#311b92!important}.v-application .deep-purple.accent-1{background-color:#b388ff!important;border-color:#b388ff!important}.v-application .deep-purple--text.text--accent-1{color:#b388ff!important;caret-color:#b388ff!important}.v-application .deep-purple.accent-2{background-color:#7c4dff!important;border-color:#7c4dff!important}.v-application .deep-purple--text.text--accent-2{color:#7c4dff!important;caret-color:#7c4dff!important}.v-application .deep-purple.accent-3{background-color:#651fff!important;border-color:#651fff!important}.v-application .deep-purple--text.text--accent-3{color:#651fff!important;caret-color:#651fff!important}.v-application .deep-purple.accent-4{background-color:#6200ea!important;border-color:#6200ea!important}.v-application .deep-purple--text.text--accent-4{color:#6200ea!important;caret-color:#6200ea!important}.v-application .indigo{background-color:#3f51b5!important;border-color:#3f51b5!important}.v-application .indigo--text{color:#3f51b5!important;caret-color:#3f51b5!important}.v-application .indigo.lighten-5{background-color:#e8eaf6!important;border-color:#e8eaf6!important}.v-application .indigo--text.text--lighten-5{color:#e8eaf6!important;caret-color:#e8eaf6!important}.v-application .indigo.lighten-4{background-color:#c5cae9!important;border-color:#c5cae9!important}.v-application .indigo--text.text--lighten-4{color:#c5cae9!important;caret-color:#c5cae9!important}.v-application .indigo.lighten-3{background-color:#9fa8da!important;border-color:#9fa8da!important}.v-application .indigo--text.text--lighten-3{color:#9fa8da!important;caret-color:#9fa8da!important}.v-application .indigo.lighten-2{background-color:#7986cb!important;border-color:#7986cb!important}.v-application .indigo--text.text--lighten-2{color:#7986cb!important;caret-color:#7986cb!important}.v-application .indigo.lighten-1{background-color:#5c6bc0!important;border-color:#5c6bc0!important}.v-application .indigo--text.text--lighten-1{color:#5c6bc0!important;caret-color:#5c6bc0!important}.v-application .indigo.darken-1{background-color:#3949ab!important;border-color:#3949ab!important}.v-application .indigo--text.text--darken-1{color:#3949ab!important;caret-color:#3949ab!important}.v-application .indigo.darken-2{background-color:#303f9f!important;border-color:#303f9f!important}.v-application .indigo--text.text--darken-2{color:#303f9f!important;caret-color:#303f9f!important}.v-application .indigo.darken-3{background-color:#283593!important;border-color:#283593!important}.v-application .indigo--text.text--darken-3{color:#283593!important;caret-color:#283593!important}.v-application .indigo.darken-4{background-color:#1a237e!important;border-color:#1a237e!important}.v-application .indigo--text.text--darken-4{color:#1a237e!important;caret-color:#1a237e!important}.v-application .indigo.accent-1{background-color:#8c9eff!important;border-color:#8c9eff!important}.v-application .indigo--text.text--accent-1{color:#8c9eff!important;caret-color:#8c9eff!important}.v-application .indigo.accent-2{background-color:#536dfe!important;border-color:#536dfe!important}.v-application .indigo--text.text--accent-2{color:#536dfe!important;caret-color:#536dfe!important}.v-application .indigo.accent-3{background-color:#3d5afe!important;border-color:#3d5afe!important}.v-application .indigo--text.text--accent-3{color:#3d5afe!important;caret-color:#3d5afe!important}.v-application .indigo.accent-4{background-color:#304ffe!important;border-color:#304ffe!important}.v-application .indigo--text.text--accent-4{color:#304ffe!important;caret-color:#304ffe!important}.v-application .blue{background-color:#2196f3!important;border-color:#2196f3!important}.v-application .blue--text{color:#2196f3!important;caret-color:#2196f3!important}.v-application .blue.lighten-5{background-color:#e3f2fd!important;border-color:#e3f2fd!important}.v-application .blue--text.text--lighten-5{color:#e3f2fd!important;caret-color:#e3f2fd!important}.v-application .blue.lighten-4{background-color:#bbdefb!important;border-color:#bbdefb!important}.v-application .blue--text.text--lighten-4{color:#bbdefb!important;caret-color:#bbdefb!important}.v-application .blue.lighten-3{background-color:#90caf9!important;border-color:#90caf9!important}.v-application .blue--text.text--lighten-3{color:#90caf9!important;caret-color:#90caf9!important}.v-application .blue.lighten-2{background-color:#64b5f6!important;border-color:#64b5f6!important}.v-application .blue--text.text--lighten-2{color:#64b5f6!important;caret-color:#64b5f6!important}.v-application .blue.lighten-1{background-color:#42a5f5!important;border-color:#42a5f5!important}.v-application .blue--text.text--lighten-1{color:#42a5f5!important;caret-color:#42a5f5!important}.v-application .blue.darken-1{background-color:#1e88e5!important;border-color:#1e88e5!important}.v-application .blue--text.text--darken-1{color:#1e88e5!important;caret-color:#1e88e5!important}.v-application .blue.darken-2{background-color:#1976d2!important;border-color:#1976d2!important}.v-application .blue--text.text--darken-2{color:#1976d2!important;caret-color:#1976d2!important}.v-application .blue.darken-3{background-color:#1565c0!important;border-color:#1565c0!important}.v-application .blue--text.text--darken-3{color:#1565c0!important;caret-color:#1565c0!important}.v-application .blue.darken-4{background-color:#0d47a1!important;border-color:#0d47a1!important}.v-application .blue--text.text--darken-4{color:#0d47a1!important;caret-color:#0d47a1!important}.v-application .blue.accent-1{background-color:#82b1ff!important;border-color:#82b1ff!important}.v-application .blue--text.text--accent-1{color:#82b1ff!important;caret-color:#82b1ff!important}.v-application .blue.accent-2{background-color:#448aff!important;border-color:#448aff!important}.v-application .blue--text.text--accent-2{color:#448aff!important;caret-color:#448aff!important}.v-application .blue.accent-3{background-color:#2979ff!important;border-color:#2979ff!important}.v-application .blue--text.text--accent-3{color:#2979ff!important;caret-color:#2979ff!important}.v-application .blue.accent-4{background-color:#2962ff!important;border-color:#2962ff!important}.v-application .blue--text.text--accent-4{color:#2962ff!important;caret-color:#2962ff!important}.v-application .light-blue{background-color:#03a9f4!important;border-color:#03a9f4!important}.v-application .light-blue--text{color:#03a9f4!important;caret-color:#03a9f4!important}.v-application .light-blue.lighten-5{background-color:#e1f5fe!important;border-color:#e1f5fe!important}.v-application .light-blue--text.text--lighten-5{color:#e1f5fe!important;caret-color:#e1f5fe!important}.v-application .light-blue.lighten-4{background-color:#b3e5fc!important;border-color:#b3e5fc!important}.v-application .light-blue--text.text--lighten-4{color:#b3e5fc!important;caret-color:#b3e5fc!important}.v-application .light-blue.lighten-3{background-color:#81d4fa!important;border-color:#81d4fa!important}.v-application .light-blue--text.text--lighten-3{color:#81d4fa!important;caret-color:#81d4fa!important}.v-application .light-blue.lighten-2{background-color:#4fc3f7!important;border-color:#4fc3f7!important}.v-application .light-blue--text.text--lighten-2{color:#4fc3f7!important;caret-color:#4fc3f7!important}.v-application .light-blue.lighten-1{background-color:#29b6f6!important;border-color:#29b6f6!important}.v-application .light-blue--text.text--lighten-1{color:#29b6f6!important;caret-color:#29b6f6!important}.v-application .light-blue.darken-1{background-color:#039be5!important;border-color:#039be5!important}.v-application .light-blue--text.text--darken-1{color:#039be5!important;caret-color:#039be5!important}.v-application .light-blue.darken-2{background-color:#0288d1!important;border-color:#0288d1!important}.v-application .light-blue--text.text--darken-2{color:#0288d1!important;caret-color:#0288d1!important}.v-application .light-blue.darken-3{background-color:#0277bd!important;border-color:#0277bd!important}.v-application .light-blue--text.text--darken-3{color:#0277bd!important;caret-color:#0277bd!important}.v-application .light-blue.darken-4{background-color:#01579b!important;border-color:#01579b!important}.v-application .light-blue--text.text--darken-4{color:#01579b!important;caret-color:#01579b!important}.v-application .light-blue.accent-1{background-color:#80d8ff!important;border-color:#80d8ff!important}.v-application .light-blue--text.text--accent-1{color:#80d8ff!important;caret-color:#80d8ff!important}.v-application .light-blue.accent-2{background-color:#40c4ff!important;border-color:#40c4ff!important}.v-application .light-blue--text.text--accent-2{color:#40c4ff!important;caret-color:#40c4ff!important}.v-application .light-blue.accent-3{background-color:#00b0ff!important;border-color:#00b0ff!important}.v-application .light-blue--text.text--accent-3{color:#00b0ff!important;caret-color:#00b0ff!important}.v-application .light-blue.accent-4{background-color:#0091ea!important;border-color:#0091ea!important}.v-application .light-blue--text.text--accent-4{color:#0091ea!important;caret-color:#0091ea!important}.v-application .cyan{background-color:#00bcd4!important;border-color:#00bcd4!important}.v-application .cyan--text{color:#00bcd4!important;caret-color:#00bcd4!important}.v-application .cyan.lighten-5{background-color:#e0f7fa!important;border-color:#e0f7fa!important}.v-application .cyan--text.text--lighten-5{color:#e0f7fa!important;caret-color:#e0f7fa!important}.v-application .cyan.lighten-4{background-color:#b2ebf2!important;border-color:#b2ebf2!important}.v-application .cyan--text.text--lighten-4{color:#b2ebf2!important;caret-color:#b2ebf2!important}.v-application .cyan.lighten-3{background-color:#80deea!important;border-color:#80deea!important}.v-application .cyan--text.text--lighten-3{color:#80deea!important;caret-color:#80deea!important}.v-application .cyan.lighten-2{background-color:#4dd0e1!important;border-color:#4dd0e1!important}.v-application .cyan--text.text--lighten-2{color:#4dd0e1!important;caret-color:#4dd0e1!important}.v-application .cyan.lighten-1{background-color:#26c6da!important;border-color:#26c6da!important}.v-application .cyan--text.text--lighten-1{color:#26c6da!important;caret-color:#26c6da!important}.v-application .cyan.darken-1{background-color:#00acc1!important;border-color:#00acc1!important}.v-application .cyan--text.text--darken-1{color:#00acc1!important;caret-color:#00acc1!important}.v-application .cyan.darken-2{background-color:#0097a7!important;border-color:#0097a7!important}.v-application .cyan--text.text--darken-2{color:#0097a7!important;caret-color:#0097a7!important}.v-application .cyan.darken-3{background-color:#00838f!important;border-color:#00838f!important}.v-application .cyan--text.text--darken-3{color:#00838f!important;caret-color:#00838f!important}.v-application .cyan.darken-4{background-color:#006064!important;border-color:#006064!important}.v-application .cyan--text.text--darken-4{color:#006064!important;caret-color:#006064!important}.v-application .cyan.accent-1{background-color:#84ffff!important;border-color:#84ffff!important}.v-application .cyan--text.text--accent-1{color:#84ffff!important;caret-color:#84ffff!important}.v-application .cyan.accent-2{background-color:#18ffff!important;border-color:#18ffff!important}.v-application .cyan--text.text--accent-2{color:#18ffff!important;caret-color:#18ffff!important}.v-application .cyan.accent-3{background-color:#00e5ff!important;border-color:#00e5ff!important}.v-application .cyan--text.text--accent-3{color:#00e5ff!important;caret-color:#00e5ff!important}.v-application .cyan.accent-4{background-color:#00b8d4!important;border-color:#00b8d4!important}.v-application .cyan--text.text--accent-4{color:#00b8d4!important;caret-color:#00b8d4!important}.v-application .teal{background-color:#009688!important;border-color:#009688!important}.v-application .teal--text{color:#009688!important;caret-color:#009688!important}.v-application .teal.lighten-5{background-color:#e0f2f1!important;border-color:#e0f2f1!important}.v-application .teal--text.text--lighten-5{color:#e0f2f1!important;caret-color:#e0f2f1!important}.v-application .teal.lighten-4{background-color:#b2dfdb!important;border-color:#b2dfdb!important}.v-application .teal--text.text--lighten-4{color:#b2dfdb!important;caret-color:#b2dfdb!important}.v-application .teal.lighten-3{background-color:#80cbc4!important;border-color:#80cbc4!important}.v-application .teal--text.text--lighten-3{color:#80cbc4!important;caret-color:#80cbc4!important}.v-application .teal.lighten-2{background-color:#4db6ac!important;border-color:#4db6ac!important}.v-application .teal--text.text--lighten-2{color:#4db6ac!important;caret-color:#4db6ac!important}.v-application .teal.lighten-1{background-color:#26a69a!important;border-color:#26a69a!important}.v-application .teal--text.text--lighten-1{color:#26a69a!important;caret-color:#26a69a!important}.v-application .teal.darken-1{background-color:#00897b!important;border-color:#00897b!important}.v-application .teal--text.text--darken-1{color:#00897b!important;caret-color:#00897b!important}.v-application .teal.darken-2{background-color:#00796b!important;border-color:#00796b!important}.v-application .teal--text.text--darken-2{color:#00796b!important;caret-color:#00796b!important}.v-application .teal.darken-3{background-color:#00695c!important;border-color:#00695c!important}.v-application .teal--text.text--darken-3{color:#00695c!important;caret-color:#00695c!important}.v-application .teal.darken-4{background-color:#004d40!important;border-color:#004d40!important}.v-application .teal--text.text--darken-4{color:#004d40!important;caret-color:#004d40!important}.v-application .teal.accent-1{background-color:#a7ffeb!important;border-color:#a7ffeb!important}.v-application .teal--text.text--accent-1{color:#a7ffeb!important;caret-color:#a7ffeb!important}.v-application .teal.accent-2{background-color:#64ffda!important;border-color:#64ffda!important}.v-application .teal--text.text--accent-2{color:#64ffda!important;caret-color:#64ffda!important}.v-application .teal.accent-3{background-color:#1de9b6!important;border-color:#1de9b6!important}.v-application .teal--text.text--accent-3{color:#1de9b6!important;caret-color:#1de9b6!important}.v-application .teal.accent-4{background-color:#00bfa5!important;border-color:#00bfa5!important}.v-application .teal--text.text--accent-4{color:#00bfa5!important;caret-color:#00bfa5!important}.v-application .green{background-color:#4caf50!important;border-color:#4caf50!important}.v-application .green--text{color:#4caf50!important;caret-color:#4caf50!important}.v-application .green.lighten-5{background-color:#e8f5e9!important;border-color:#e8f5e9!important}.v-application .green--text.text--lighten-5{color:#e8f5e9!important;caret-color:#e8f5e9!important}.v-application .green.lighten-4{background-color:#c8e6c9!important;border-color:#c8e6c9!important}.v-application .green--text.text--lighten-4{color:#c8e6c9!important;caret-color:#c8e6c9!important}.v-application .green.lighten-3{background-color:#a5d6a7!important;border-color:#a5d6a7!important}.v-application .green--text.text--lighten-3{color:#a5d6a7!important;caret-color:#a5d6a7!important}.v-application .green.lighten-2{background-color:#81c784!important;border-color:#81c784!important}.v-application .green--text.text--lighten-2{color:#81c784!important;caret-color:#81c784!important}.v-application .green.lighten-1{background-color:#66bb6a!important;border-color:#66bb6a!important}.v-application .green--text.text--lighten-1{color:#66bb6a!important;caret-color:#66bb6a!important}.v-application .green.darken-1{background-color:#43a047!important;border-color:#43a047!important}.v-application .green--text.text--darken-1{color:#43a047!important;caret-color:#43a047!important}.v-application .green.darken-2{background-color:#388e3c!important;border-color:#388e3c!important}.v-application .green--text.text--darken-2{color:#388e3c!important;caret-color:#388e3c!important}.v-application .green.darken-3{background-color:#2e7d32!important;border-color:#2e7d32!important}.v-application .green--text.text--darken-3{color:#2e7d32!important;caret-color:#2e7d32!important}.v-application .green.darken-4{background-color:#1b5e20!important;border-color:#1b5e20!important}.v-application .green--text.text--darken-4{color:#1b5e20!important;caret-color:#1b5e20!important}.v-application .green.accent-1{background-color:#b9f6ca!important;border-color:#b9f6ca!important}.v-application .green--text.text--accent-1{color:#b9f6ca!important;caret-color:#b9f6ca!important}.v-application .green.accent-2{background-color:#69f0ae!important;border-color:#69f0ae!important}.v-application .green--text.text--accent-2{color:#69f0ae!important;caret-color:#69f0ae!important}.v-application .green.accent-3{background-color:#00e676!important;border-color:#00e676!important}.v-application .green--text.text--accent-3{color:#00e676!important;caret-color:#00e676!important}.v-application .green.accent-4{background-color:#00c853!important;border-color:#00c853!important}.v-application .green--text.text--accent-4{color:#00c853!important;caret-color:#00c853!important}.v-application .light-green{background-color:#8bc34a!important;border-color:#8bc34a!important}.v-application .light-green--text{color:#8bc34a!important;caret-color:#8bc34a!important}.v-application .light-green.lighten-5{background-color:#f1f8e9!important;border-color:#f1f8e9!important}.v-application .light-green--text.text--lighten-5{color:#f1f8e9!important;caret-color:#f1f8e9!important}.v-application .light-green.lighten-4{background-color:#dcedc8!important;border-color:#dcedc8!important}.v-application .light-green--text.text--lighten-4{color:#dcedc8!important;caret-color:#dcedc8!important}.v-application .light-green.lighten-3{background-color:#c5e1a5!important;border-color:#c5e1a5!important}.v-application .light-green--text.text--lighten-3{color:#c5e1a5!important;caret-color:#c5e1a5!important}.v-application .light-green.lighten-2{background-color:#aed581!important;border-color:#aed581!important}.v-application .light-green--text.text--lighten-2{color:#aed581!important;caret-color:#aed581!important}.v-application .light-green.lighten-1{background-color:#9ccc65!important;border-color:#9ccc65!important}.v-application .light-green--text.text--lighten-1{color:#9ccc65!important;caret-color:#9ccc65!important}.v-application .light-green.darken-1{background-color:#7cb342!important;border-color:#7cb342!important}.v-application .light-green--text.text--darken-1{color:#7cb342!important;caret-color:#7cb342!important}.v-application .light-green.darken-2{background-color:#689f38!important;border-color:#689f38!important}.v-application .light-green--text.text--darken-2{color:#689f38!important;caret-color:#689f38!important}.v-application .light-green.darken-3{background-color:#558b2f!important;border-color:#558b2f!important}.v-application .light-green--text.text--darken-3{color:#558b2f!important;caret-color:#558b2f!important}.v-application .light-green.darken-4{background-color:#33691e!important;border-color:#33691e!important}.v-application .light-green--text.text--darken-4{color:#33691e!important;caret-color:#33691e!important}.v-application .light-green.accent-1{background-color:#ccff90!important;border-color:#ccff90!important}.v-application .light-green--text.text--accent-1{color:#ccff90!important;caret-color:#ccff90!important}.v-application .light-green.accent-2{background-color:#b2ff59!important;border-color:#b2ff59!important}.v-application .light-green--text.text--accent-2{color:#b2ff59!important;caret-color:#b2ff59!important}.v-application .light-green.accent-3{background-color:#76ff03!important;border-color:#76ff03!important}.v-application .light-green--text.text--accent-3{color:#76ff03!important;caret-color:#76ff03!important}.v-application .light-green.accent-4{background-color:#64dd17!important;border-color:#64dd17!important}.v-application .light-green--text.text--accent-4{color:#64dd17!important;caret-color:#64dd17!important}.v-application .lime{background-color:#cddc39!important;border-color:#cddc39!important}.v-application .lime--text{color:#cddc39!important;caret-color:#cddc39!important}.v-application .lime.lighten-5{background-color:#f9fbe7!important;border-color:#f9fbe7!important}.v-application .lime--text.text--lighten-5{color:#f9fbe7!important;caret-color:#f9fbe7!important}.v-application .lime.lighten-4{background-color:#f0f4c3!important;border-color:#f0f4c3!important}.v-application .lime--text.text--lighten-4{color:#f0f4c3!important;caret-color:#f0f4c3!important}.v-application .lime.lighten-3{background-color:#e6ee9c!important;border-color:#e6ee9c!important}.v-application .lime--text.text--lighten-3{color:#e6ee9c!important;caret-color:#e6ee9c!important}.v-application .lime.lighten-2{background-color:#dce775!important;border-color:#dce775!important}.v-application .lime--text.text--lighten-2{color:#dce775!important;caret-color:#dce775!important}.v-application .lime.lighten-1{background-color:#d4e157!important;border-color:#d4e157!important}.v-application .lime--text.text--lighten-1{color:#d4e157!important;caret-color:#d4e157!important}.v-application .lime.darken-1{background-color:#c0ca33!important;border-color:#c0ca33!important}.v-application .lime--text.text--darken-1{color:#c0ca33!important;caret-color:#c0ca33!important}.v-application .lime.darken-2{background-color:#afb42b!important;border-color:#afb42b!important}.v-application .lime--text.text--darken-2{color:#afb42b!important;caret-color:#afb42b!important}.v-application .lime.darken-3{background-color:#9e9d24!important;border-color:#9e9d24!important}.v-application .lime--text.text--darken-3{color:#9e9d24!important;caret-color:#9e9d24!important}.v-application .lime.darken-4{background-color:#827717!important;border-color:#827717!important}.v-application .lime--text.text--darken-4{color:#827717!important;caret-color:#827717!important}.v-application .lime.accent-1{background-color:#f4ff81!important;border-color:#f4ff81!important}.v-application .lime--text.text--accent-1{color:#f4ff81!important;caret-color:#f4ff81!important}.v-application .lime.accent-2{background-color:#eeff41!important;border-color:#eeff41!important}.v-application .lime--text.text--accent-2{color:#eeff41!important;caret-color:#eeff41!important}.v-application .lime.accent-3{background-color:#c6ff00!important;border-color:#c6ff00!important}.v-application .lime--text.text--accent-3{color:#c6ff00!important;caret-color:#c6ff00!important}.v-application .lime.accent-4{background-color:#aeea00!important;border-color:#aeea00!important}.v-application .lime--text.text--accent-4{color:#aeea00!important;caret-color:#aeea00!important}.v-application .yellow{background-color:#ffeb3b!important;border-color:#ffeb3b!important}.v-application .yellow--text{color:#ffeb3b!important;caret-color:#ffeb3b!important}.v-application .yellow.lighten-5{background-color:#fffde7!important;border-color:#fffde7!important}.v-application .yellow--text.text--lighten-5{color:#fffde7!important;caret-color:#fffde7!important}.v-application .yellow.lighten-4{background-color:#fff9c4!important;border-color:#fff9c4!important}.v-application .yellow--text.text--lighten-4{color:#fff9c4!important;caret-color:#fff9c4!important}.v-application .yellow.lighten-3{background-color:#fff59d!important;border-color:#fff59d!important}.v-application .yellow--text.text--lighten-3{color:#fff59d!important;caret-color:#fff59d!important}.v-application .yellow.lighten-2{background-color:#fff176!important;border-color:#fff176!important}.v-application .yellow--text.text--lighten-2{color:#fff176!important;caret-color:#fff176!important}.v-application .yellow.lighten-1{background-color:#ffee58!important;border-color:#ffee58!important}.v-application .yellow--text.text--lighten-1{color:#ffee58!important;caret-color:#ffee58!important}.v-application .yellow.darken-1{background-color:#fdd835!important;border-color:#fdd835!important}.v-application .yellow--text.text--darken-1{color:#fdd835!important;caret-color:#fdd835!important}.v-application .yellow.darken-2{background-color:#fbc02d!important;border-color:#fbc02d!important}.v-application .yellow--text.text--darken-2{color:#fbc02d!important;caret-color:#fbc02d!important}.v-application .yellow.darken-3{background-color:#f9a825!important;border-color:#f9a825!important}.v-application .yellow--text.text--darken-3{color:#f9a825!important;caret-color:#f9a825!important}.v-application .yellow.darken-4{background-color:#f57f17!important;border-color:#f57f17!important}.v-application .yellow--text.text--darken-4{color:#f57f17!important;caret-color:#f57f17!important}.v-application .yellow.accent-1{background-color:#ffff8d!important;border-color:#ffff8d!important}.v-application .yellow--text.text--accent-1{color:#ffff8d!important;caret-color:#ffff8d!important}.v-application .yellow.accent-2{background-color:#ff0!important;border-color:#ff0!important}.v-application .yellow--text.text--accent-2{color:#ff0!important;caret-color:#ff0!important}.v-application .yellow.accent-3{background-color:#ffea00!important;border-color:#ffea00!important}.v-application .yellow--text.text--accent-3{color:#ffea00!important;caret-color:#ffea00!important}.v-application .yellow.accent-4{background-color:#ffd600!important;border-color:#ffd600!important}.v-application .yellow--text.text--accent-4{color:#ffd600!important;caret-color:#ffd600!important}.v-application .amber{background-color:#ffc107!important;border-color:#ffc107!important}.v-application .amber--text{color:#ffc107!important;caret-color:#ffc107!important}.v-application .amber.lighten-5{background-color:#fff8e1!important;border-color:#fff8e1!important}.v-application .amber--text.text--lighten-5{color:#fff8e1!important;caret-color:#fff8e1!important}.v-application .amber.lighten-4{background-color:#ffecb3!important;border-color:#ffecb3!important}.v-application .amber--text.text--lighten-4{color:#ffecb3!important;caret-color:#ffecb3!important}.v-application .amber.lighten-3{background-color:#ffe082!important;border-color:#ffe082!important}.v-application .amber--text.text--lighten-3{color:#ffe082!important;caret-color:#ffe082!important}.v-application .amber.lighten-2{background-color:#ffd54f!important;border-color:#ffd54f!important}.v-application .amber--text.text--lighten-2{color:#ffd54f!important;caret-color:#ffd54f!important}.v-application .amber.lighten-1{background-color:#ffca28!important;border-color:#ffca28!important}.v-application .amber--text.text--lighten-1{color:#ffca28!important;caret-color:#ffca28!important}.v-application .amber.darken-1{background-color:#ffb300!important;border-color:#ffb300!important}.v-application .amber--text.text--darken-1{color:#ffb300!important;caret-color:#ffb300!important}.v-application .amber.darken-2{background-color:#ffa000!important;border-color:#ffa000!important}.v-application .amber--text.text--darken-2{color:#ffa000!important;caret-color:#ffa000!important}.v-application .amber.darken-3{background-color:#ff8f00!important;border-color:#ff8f00!important}.v-application .amber--text.text--darken-3{color:#ff8f00!important;caret-color:#ff8f00!important}.v-application .amber.darken-4{background-color:#ff6f00!important;border-color:#ff6f00!important}.v-application .amber--text.text--darken-4{color:#ff6f00!important;caret-color:#ff6f00!important}.v-application .amber.accent-1{background-color:#ffe57f!important;border-color:#ffe57f!important}.v-application .amber--text.text--accent-1{color:#ffe57f!important;caret-color:#ffe57f!important}.v-application .amber.accent-2{background-color:#ffd740!important;border-color:#ffd740!important}.v-application .amber--text.text--accent-2{color:#ffd740!important;caret-color:#ffd740!important}.v-application .amber.accent-3{background-color:#ffc400!important;border-color:#ffc400!important}.v-application .amber--text.text--accent-3{color:#ffc400!important;caret-color:#ffc400!important}.v-application .amber.accent-4{background-color:#ffab00!important;border-color:#ffab00!important}.v-application .amber--text.text--accent-4{color:#ffab00!important;caret-color:#ffab00!important}.v-application .orange{background-color:#ff9800!important;border-color:#ff9800!important}.v-application .orange--text{color:#ff9800!important;caret-color:#ff9800!important}.v-application .orange.lighten-5{background-color:#fff3e0!important;border-color:#fff3e0!important}.v-application .orange--text.text--lighten-5{color:#fff3e0!important;caret-color:#fff3e0!important}.v-application .orange.lighten-4{background-color:#ffe0b2!important;border-color:#ffe0b2!important}.v-application .orange--text.text--lighten-4{color:#ffe0b2!important;caret-color:#ffe0b2!important}.v-application .orange.lighten-3{background-color:#ffcc80!important;border-color:#ffcc80!important}.v-application .orange--text.text--lighten-3{color:#ffcc80!important;caret-color:#ffcc80!important}.v-application .orange.lighten-2{background-color:#ffb74d!important;border-color:#ffb74d!important}.v-application .orange--text.text--lighten-2{color:#ffb74d!important;caret-color:#ffb74d!important}.v-application .orange.lighten-1{background-color:#ffa726!important;border-color:#ffa726!important}.v-application .orange--text.text--lighten-1{color:#ffa726!important;caret-color:#ffa726!important}.v-application .orange.darken-1{background-color:#fb8c00!important;border-color:#fb8c00!important}.v-application .orange--text.text--darken-1{color:#fb8c00!important;caret-color:#fb8c00!important}.v-application .orange.darken-2{background-color:#f57c00!important;border-color:#f57c00!important}.v-application .orange--text.text--darken-2{color:#f57c00!important;caret-color:#f57c00!important}.v-application .orange.darken-3{background-color:#ef6c00!important;border-color:#ef6c00!important}.v-application .orange--text.text--darken-3{color:#ef6c00!important;caret-color:#ef6c00!important}.v-application .orange.darken-4{background-color:#e65100!important;border-color:#e65100!important}.v-application .orange--text.text--darken-4{color:#e65100!important;caret-color:#e65100!important}.v-application .orange.accent-1{background-color:#ffd180!important;border-color:#ffd180!important}.v-application .orange--text.text--accent-1{color:#ffd180!important;caret-color:#ffd180!important}.v-application .orange.accent-2{background-color:#ffab40!important;border-color:#ffab40!important}.v-application .orange--text.text--accent-2{color:#ffab40!important;caret-color:#ffab40!important}.v-application .orange.accent-3{background-color:#ff9100!important;border-color:#ff9100!important}.v-application .orange--text.text--accent-3{color:#ff9100!important;caret-color:#ff9100!important}.v-application .orange.accent-4{background-color:#ff6d00!important;border-color:#ff6d00!important}.v-application .orange--text.text--accent-4{color:#ff6d00!important;caret-color:#ff6d00!important}.v-application .deep-orange{background-color:#ff5722!important;border-color:#ff5722!important}.v-application .deep-orange--text{color:#ff5722!important;caret-color:#ff5722!important}.v-application .deep-orange.lighten-5{background-color:#fbe9e7!important;border-color:#fbe9e7!important}.v-application .deep-orange--text.text--lighten-5{color:#fbe9e7!important;caret-color:#fbe9e7!important}.v-application .deep-orange.lighten-4{background-color:#ffccbc!important;border-color:#ffccbc!important}.v-application .deep-orange--text.text--lighten-4{color:#ffccbc!important;caret-color:#ffccbc!important}.v-application .deep-orange.lighten-3{background-color:#ffab91!important;border-color:#ffab91!important}.v-application .deep-orange--text.text--lighten-3{color:#ffab91!important;caret-color:#ffab91!important}.v-application .deep-orange.lighten-2{background-color:#ff8a65!important;border-color:#ff8a65!important}.v-application .deep-orange--text.text--lighten-2{color:#ff8a65!important;caret-color:#ff8a65!important}.v-application .deep-orange.lighten-1{background-color:#ff7043!important;border-color:#ff7043!important}.v-application .deep-orange--text.text--lighten-1{color:#ff7043!important;caret-color:#ff7043!important}.v-application .deep-orange.darken-1{background-color:#f4511e!important;border-color:#f4511e!important}.v-application .deep-orange--text.text--darken-1{color:#f4511e!important;caret-color:#f4511e!important}.v-application .deep-orange.darken-2{background-color:#e64a19!important;border-color:#e64a19!important}.v-application .deep-orange--text.text--darken-2{color:#e64a19!important;caret-color:#e64a19!important}.v-application .deep-orange.darken-3{background-color:#d84315!important;border-color:#d84315!important}.v-application .deep-orange--text.text--darken-3{color:#d84315!important;caret-color:#d84315!important}.v-application .deep-orange.darken-4{background-color:#bf360c!important;border-color:#bf360c!important}.v-application .deep-orange--text.text--darken-4{color:#bf360c!important;caret-color:#bf360c!important}.v-application .deep-orange.accent-1{background-color:#ff9e80!important;border-color:#ff9e80!important}.v-application .deep-orange--text.text--accent-1{color:#ff9e80!important;caret-color:#ff9e80!important}.v-application .deep-orange.accent-2{background-color:#ff6e40!important;border-color:#ff6e40!important}.v-application .deep-orange--text.text--accent-2{color:#ff6e40!important;caret-color:#ff6e40!important}.v-application .deep-orange.accent-3{background-color:#ff3d00!important;border-color:#ff3d00!important}.v-application .deep-orange--text.text--accent-3{color:#ff3d00!important;caret-color:#ff3d00!important}.v-application .deep-orange.accent-4{background-color:#dd2c00!important;border-color:#dd2c00!important}.v-application .deep-orange--text.text--accent-4{color:#dd2c00!important;caret-color:#dd2c00!important}.v-application .brown{background-color:#795548!important;border-color:#795548!important}.v-application .brown--text{color:#795548!important;caret-color:#795548!important}.v-application .brown.lighten-5{background-color:#efebe9!important;border-color:#efebe9!important}.v-application .brown--text.text--lighten-5{color:#efebe9!important;caret-color:#efebe9!important}.v-application .brown.lighten-4{background-color:#d7ccc8!important;border-color:#d7ccc8!important}.v-application .brown--text.text--lighten-4{color:#d7ccc8!important;caret-color:#d7ccc8!important}.v-application .brown.lighten-3{background-color:#bcaaa4!important;border-color:#bcaaa4!important}.v-application .brown--text.text--lighten-3{color:#bcaaa4!important;caret-color:#bcaaa4!important}.v-application .brown.lighten-2{background-color:#a1887f!important;border-color:#a1887f!important}.v-application .brown--text.text--lighten-2{color:#a1887f!important;caret-color:#a1887f!important}.v-application .brown.lighten-1{background-color:#8d6e63!important;border-color:#8d6e63!important}.v-application .brown--text.text--lighten-1{color:#8d6e63!important;caret-color:#8d6e63!important}.v-application .brown.darken-1{background-color:#6d4c41!important;border-color:#6d4c41!important}.v-application .brown--text.text--darken-1{color:#6d4c41!important;caret-color:#6d4c41!important}.v-application .brown.darken-2{background-color:#5d4037!important;border-color:#5d4037!important}.v-application .brown--text.text--darken-2{color:#5d4037!important;caret-color:#5d4037!important}.v-application .brown.darken-3{background-color:#4e342e!important;border-color:#4e342e!important}.v-application .brown--text.text--darken-3{color:#4e342e!important;caret-color:#4e342e!important}.v-application .brown.darken-4{background-color:#3e2723!important;border-color:#3e2723!important}.v-application .brown--text.text--darken-4{color:#3e2723!important;caret-color:#3e2723!important}.v-application .blue-grey{background-color:#607d8b!important;border-color:#607d8b!important}.v-application .blue-grey--text{color:#607d8b!important;caret-color:#607d8b!important}.v-application .blue-grey.lighten-5{background-color:#eceff1!important;border-color:#eceff1!important}.v-application .blue-grey--text.text--lighten-5{color:#eceff1!important;caret-color:#eceff1!important}.v-application .blue-grey.lighten-4{background-color:#cfd8dc!important;border-color:#cfd8dc!important}.v-application .blue-grey--text.text--lighten-4{color:#cfd8dc!important;caret-color:#cfd8dc!important}.v-application .blue-grey.lighten-3{background-color:#b0bec5!important;border-color:#b0bec5!important}.v-application .blue-grey--text.text--lighten-3{color:#b0bec5!important;caret-color:#b0bec5!important}.v-application .blue-grey.lighten-2{background-color:#90a4ae!important;border-color:#90a4ae!important}.v-application .blue-grey--text.text--lighten-2{color:#90a4ae!important;caret-color:#90a4ae!important}.v-application .blue-grey.lighten-1{background-color:#78909c!important;border-color:#78909c!important}.v-application .blue-grey--text.text--lighten-1{color:#78909c!important;caret-color:#78909c!important}.v-application .blue-grey.darken-1{background-color:#546e7a!important;border-color:#546e7a!important}.v-application .blue-grey--text.text--darken-1{color:#546e7a!important;caret-color:#546e7a!important}.v-application .blue-grey.darken-2{background-color:#455a64!important;border-color:#455a64!important}.v-application .blue-grey--text.text--darken-2{color:#455a64!important;caret-color:#455a64!important}.v-application .blue-grey.darken-3{background-color:#37474f!important;border-color:#37474f!important}.v-application .blue-grey--text.text--darken-3{color:#37474f!important;caret-color:#37474f!important}.v-application .blue-grey.darken-4{background-color:#263238!important;border-color:#263238!important}.v-application .blue-grey--text.text--darken-4{color:#263238!important;caret-color:#263238!important}.v-application .grey{background-color:#9e9e9e!important;border-color:#9e9e9e!important}.v-application .grey--text{color:#9e9e9e!important;caret-color:#9e9e9e!important}.v-application .grey.lighten-5{background-color:#fafafa!important;border-color:#fafafa!important}.v-application .grey--text.text--lighten-5{color:#fafafa!important;caret-color:#fafafa!important}.v-application .grey.lighten-4{background-color:#f5f5f5!important;border-color:#f5f5f5!important}.v-application .grey--text.text--lighten-4{color:#f5f5f5!important;caret-color:#f5f5f5!important}.v-application .grey.lighten-3{background-color:#eee!important;border-color:#eee!important}.v-application .grey--text.text--lighten-3{color:#eee!important;caret-color:#eee!important}.v-application .grey.lighten-2{background-color:#e0e0e0!important;border-color:#e0e0e0!important}.v-application .grey--text.text--lighten-2{color:#e0e0e0!important;caret-color:#e0e0e0!important}.v-application .grey.lighten-1{background-color:#bdbdbd!important;border-color:#bdbdbd!important}.v-application .grey--text.text--lighten-1{color:#bdbdbd!important;caret-color:#bdbdbd!important}.v-application .grey.darken-1{background-color:#757575!important;border-color:#757575!important}.v-application .grey--text.text--darken-1{color:#757575!important;caret-color:#757575!important}.v-application .grey.darken-2{background-color:#616161!important;border-color:#616161!important}.v-application .grey--text.text--darken-2{color:#616161!important;caret-color:#616161!important}.v-application .grey.darken-3{background-color:#424242!important;border-color:#424242!important}.v-application .grey--text.text--darken-3{color:#424242!important;caret-color:#424242!important}.v-application .grey.darken-4{background-color:#212121!important;border-color:#212121!important}.v-application .grey--text.text--darken-4{color:#212121!important;caret-color:#212121!important}.v-application .shades.black{background-color:#000!important;border-color:#000!important}.v-application .shades--text.text--black{color:#000!important;caret-color:#000!important}.v-application .shades.white{background-color:#fff!important;border-color:#fff!important}.v-application .shades--text.text--white{color:#fff!important;caret-color:#fff!important}.v-application .shades.transparent{background-color:transparent!important;border-color:transparent!important}.v-application .shades--text.text--transparent{color:transparent!important;caret-color:transparent!important}html{-webkit-box-sizing:border-box;box-sizing:border-box;overflow-y:scroll;-webkit-text-size-adjust:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{background-repeat:no-repeat;padding:0;margin:0}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[type=button],[type=reset],[type=submit] [role=button],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{outline:0;border:0}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}img{border-style:none}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}.v-application .elevation-24{-webkit-box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)!important;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)!important}.v-application .elevation-23{-webkit-box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)!important;box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)!important}.v-application .elevation-22{-webkit-box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)!important;box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)!important}.v-application .elevation-21{-webkit-box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)!important;box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)!important}.v-application .elevation-20{-webkit-box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)!important;box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)!important}.v-application .elevation-19{-webkit-box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)!important;box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)!important}.v-application .elevation-18{-webkit-box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)!important;box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)!important}.v-application .elevation-17{-webkit-box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)!important;box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)!important}.v-application .elevation-16{-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)!important;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)!important}.v-application .elevation-15{-webkit-box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)!important;box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)!important}.v-application .elevation-14{-webkit-box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)!important;box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)!important}.v-application .elevation-13{-webkit-box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)!important;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)!important}.v-application .elevation-12{-webkit-box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)!important;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)!important}.v-application .elevation-11{-webkit-box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)!important;box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)!important}.v-application .elevation-10{-webkit-box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)!important;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)!important}.v-application .elevation-9{-webkit-box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)!important;box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)!important}.v-application .elevation-8{-webkit-box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)!important;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)!important}.v-application .elevation-7{-webkit-box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)!important;box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)!important}.v-application .elevation-6{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)!important;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)!important}.v-application .elevation-5{-webkit-box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)!important;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)!important}.v-application .elevation-4{-webkit-box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.v-application .elevation-3{-webkit-box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)!important;box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)!important}.v-application .elevation-2{-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)!important;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)!important}.v-application .elevation-1{-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)!important;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)!important}.v-application .elevation-0{-webkit-box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)!important;box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)!important}.v-application .carousel-transition-enter{-webkit-transform:translate(100%);transform:translate(100%)}.v-application .carousel-transition-leave,.v-application .carousel-transition-leave-to{position:absolute;top:0;-webkit-transform:translate(-100%);transform:translate(-100%)}.carousel-reverse-transition-enter{-webkit-transform:translate(-100%);transform:translate(-100%)}.carousel-reverse-transition-leave,.carousel-reverse-transition-leave-to{position:absolute;top:0;-webkit-transform:translate(100%);transform:translate(100%)}.dialog-transition-enter,.dialog-transition-leave-to{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}.dialog-transition-enter-to,.dialog-transition-leave{opacity:1}.dialog-bottom-transition-enter,.dialog-bottom-transition-leave-to{-webkit-transform:translateY(100%);transform:translateY(100%)}.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active,.picker-transition-enter-active,.picker-transition-leave-active{-webkit-transition:.3s cubic-bezier(0,0,.2,1);transition:.3s cubic-bezier(0,0,.2,1)}.picker-reverse-transition-enter,.picker-reverse-transition-leave-to,.picker-transition-enter,.picker-transition-leave-to{opacity:0}.picker-reverse-transition-leave,.picker-reverse-transition-leave-active,.picker-reverse-transition-leave-to,.picker-transition-leave,.picker-transition-leave-active,.picker-transition-leave-to{position:absolute!important}.picker-transition-enter{-webkit-transform:translateY(100%);transform:translateY(100%)}.picker-reverse-transition-enter,.picker-transition-leave-to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.picker-reverse-transition-leave-to{-webkit-transform:translateY(100%);transform:translateY(100%)}.picker-title-transition-enter-to,.picker-title-transition-leave{-webkit-transform:translate(0);transform:translate(0)}.picker-title-transition-enter{-webkit-transform:translate(-100%);transform:translate(-100%)}.picker-title-transition-leave-to{opacity:0;-webkit-transform:translate(100%);transform:translate(100%)}.picker-title-transition-leave,.picker-title-transition-leave-active,.picker-title-transition-leave-to{position:absolute!important}.tab-transition-enter{-webkit-transform:translate(100%);transform:translate(100%)}.tab-transition-leave,.tab-transition-leave-active{position:absolute;top:0}.tab-transition-leave-to{position:absolute}.tab-reverse-transition-enter,.tab-transition-leave-to{-webkit-transform:translate(-100%);transform:translate(-100%)}.tab-reverse-transition-leave,.tab-reverse-transition-leave-to{top:0;position:absolute;-webkit-transform:translate(100%);transform:translate(100%)}.expand-transition-enter-active,.expand-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.expand-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.expand-x-transition-enter-active,.expand-x-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.expand-x-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scale-transition-enter-active,.scale-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scale-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scale-transition-enter,.scale-transition-leave,.scale-transition-leave-to{opacity:0;-webkit-transform:scale(0);transform:scale(0)}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scale-rotate-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scale-rotate-transition-enter,.scale-rotate-transition-leave,.scale-rotate-transition-leave-to{opacity:0;-webkit-transform:scale(0) rotate(-45deg);transform:scale(0) rotate(-45deg)}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scale-rotate-reverse-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scale-rotate-reverse-transition-enter,.scale-rotate-reverse-transition-leave,.scale-rotate-reverse-transition-leave-to{opacity:0;-webkit-transform:scale(0) rotate(45deg);transform:scale(0) rotate(45deg)}.message-transition-enter-active,.message-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.message-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.message-transition-enter,.message-transition-leave-to{opacity:0;-webkit-transform:translateY(-15px);transform:translateY(-15px)}.message-transition-leave,.message-transition-leave-active{position:absolute}.slide-y-transition-enter-active,.slide-y-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.slide-y-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.slide-y-transition-enter,.slide-y-transition-leave-to{opacity:0;-webkit-transform:translateY(-15px);transform:translateY(-15px)}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.slide-y-reverse-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.slide-y-reverse-transition-enter,.slide-y-reverse-transition-leave-to{opacity:0;-webkit-transform:translateY(15px);transform:translateY(15px)}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scroll-y-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scroll-y-transition-enter,.scroll-y-transition-leave-to{opacity:0}.scroll-y-transition-enter{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.scroll-y-transition-leave-to{-webkit-transform:translateY(15px);transform:translateY(15px)}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scroll-y-reverse-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scroll-y-reverse-transition-enter,.scroll-y-reverse-transition-leave-to{opacity:0}.scroll-y-reverse-transition-enter{-webkit-transform:translateY(15px);transform:translateY(15px)}.scroll-y-reverse-transition-leave-to{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scroll-x-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scroll-x-transition-enter,.scroll-x-transition-leave-to{opacity:0}.scroll-x-transition-enter{-webkit-transform:translateX(-15px);transform:translateX(-15px)}.scroll-x-transition-leave-to{-webkit-transform:translateX(15px);transform:translateX(15px)}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.scroll-x-reverse-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.scroll-x-reverse-transition-enter,.scroll-x-reverse-transition-leave-to{opacity:0}.scroll-x-reverse-transition-enter{-webkit-transform:translateX(15px);transform:translateX(15px)}.scroll-x-reverse-transition-leave-to{-webkit-transform:translateX(-15px);transform:translateX(-15px)}.slide-x-transition-enter-active,.slide-x-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.slide-x-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.slide-x-transition-enter,.slide-x-transition-leave-to{opacity:0;-webkit-transform:translateX(-15px);transform:translateX(-15px)}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.slide-x-reverse-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.slide-x-reverse-transition-enter,.slide-x-reverse-transition-leave-to{opacity:0;-webkit-transform:translateX(15px);transform:translateX(15px)}.fade-transition-enter-active,.fade-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.fade-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.fade-transition-enter,.fade-transition-leave-to{opacity:0!important}.fab-transition-enter-active,.fab-transition-leave-active{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1);transition:.3s cubic-bezier(.25,.8,.5,1)}.fab-transition-move{-webkit-transition:-webkit-transform .6s;transition:-webkit-transform .6s;transition:transform .6s;transition:transform .6s,-webkit-transform .6s}.fab-transition-enter,.fab-transition-leave-to{-webkit-transform:scale(0) rotate(-45deg);transform:scale(0) rotate(-45deg)}.v-application .blockquote{padding:16px 0 16px 24px;font-size:18px;font-weight:300}.v-application code,.v-application kbd{display:inline-block;border-radius:3px;white-space:pre-wrap;font-size:85%;font-weight:900}.v-application code:after,.v-application code:before,.v-application kbd:after,.v-application kbd:before{content:"\A0";letter-spacing:-1px}.v-application code{background-color:#f5f5f5;color:#bd4147;-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.v-application kbd{background:#616161;color:#fff}html{font-size:16px;overflow-x:hidden;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}.v-application{font-family:Roboto,sans-serif;line-height:1.5}.v-application ::-ms-clear,.v-application ::-ms-reveal{display:none}.v-application .theme--light.heading{color:rgba(0,0,0,.87)}.v-application .theme--dark.heading{color:#fff}.v-application ol,.v-application ul{padding-left:24px}.v-application .display-4{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .display-3,.v-application .display-4{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .display-3{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .display-2{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .display-1,.v-application .display-2{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .display-1{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .headline{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .headline,.v-application .title{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .title{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .subtitle-1{font-size:1rem!important;font-weight:400;letter-spacing:.009375em!important;line-height:1.75rem;font-family:Roboto,sans-serif!important}.v-application .subtitle-2{font-weight:500;letter-spacing:.0071428571em!important;line-height:1.375rem}.v-application .body-2,.v-application .subtitle-2{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .body-2{font-weight:400;letter-spacing:.0178571429em!important;line-height:1.25rem}.v-application .body-1{font-size:1rem!important;letter-spacing:.03125em!important;line-height:1.5rem}.v-application .body-1,.v-application .caption{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .caption{font-size:.75rem!important;letter-spacing:.0333333333em!important;line-height:1.25rem}.v-application .overline{font-size:.625rem!important;font-weight:400;letter-spacing:.1666666667em!important;line-height:1rem;text-transform:uppercase;font-family:Roboto,sans-serif!important}.v-application p{margin-bottom:16px}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls .v-input__append-outer,.v-input--selection-controls .v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details) .v-input__slot{margin-bottom:12px}.v-input--selection-controls__input{color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:24px;position:relative;-webkit-transition:.3s cubic-bezier(.25,.8,.25,1);transition:.3s cubic-bezier(.25,.8,.25,1);-webkit-transition-property:color,-webkit-transform;transition-property:color,-webkit-transform;transition-property:color,transform;transition-property:color,transform,-webkit-transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;-webkit-transition:inherit;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:scale(.2);transform:scale(.2);-webkit-transition:inherit;transition:inherit}.v-input--selection-controls__ripple .v-ripple__container{-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-11px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.v-input--selection-controls.v-input .v-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;top:0;height:auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;opacity:.4;-webkit-transform:scale(1.2);transform:scale(1.2)}.v-input--selection-controls .v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-transition:none;transition:none}@media only print{.v-application .hidden-print-only{display:none!important}}@media only screen{.v-application .hidden-screen-only{display:none!important}}@media only screen and (max-width:599px){.v-application .hidden-xs-only{display:none!important}}@media only screen and (min-width:600px)and (max-width:959px){.v-application .hidden-sm-only{display:none!important}}@media only screen and (max-width:959px){.v-application .hidden-sm-and-down{display:none!important}}@media only screen and (min-width:600px){.v-application .hidden-sm-and-up{display:none!important}}@media only screen and (min-width:960px)and (max-width:1263px){.v-application .hidden-md-only{display:none!important}}@media only screen and (max-width:1263px){.v-application .hidden-md-and-down{display:none!important}}@media only screen and (min-width:960px){.v-application .hidden-md-and-up{display:none!important}}@media only screen and (min-width:1264px)and (max-width:1903px){.v-application .hidden-lg-only{display:none!important}}@media only screen and (max-width:1903px){.v-application .hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1264px){.v-application .hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1904px){.v-application .hidden-xl-only{display:none!important}}.v-application .font-weight-thin{font-weight:100!important}.v-application .font-weight-light{font-weight:300!important}.v-application .font-weight-regular{font-weight:400!important}.v-application .font-weight-medium{font-weight:500!important}.v-application .font-weight-bold{font-weight:700!important}.v-application .font-weight-black{font-weight:900!important}.v-application .font-italic{font-style:italic!important}.v-application .transition-fast-out-slow-in{-webkit-transition:.3s cubic-bezier(.4,0,.2,1)!important;transition:.3s cubic-bezier(.4,0,.2,1)!important}.v-application .transition-linear-out-slow-in{-webkit-transition:.3s cubic-bezier(0,0,.2,1)!important;transition:.3s cubic-bezier(0,0,.2,1)!important}.v-application .transition-fast-out-linear-in{-webkit-transition:.3s cubic-bezier(.4,0,1,1)!important;transition:.3s cubic-bezier(.4,0,1,1)!important}.v-application .transition-ease-in-out{-webkit-transition:.3s cubic-bezier(.4,0,.6,1)!important;transition:.3s cubic-bezier(.4,0,.6,1)!important}.v-application .transition-fast-in-fast-out{-webkit-transition:.3s cubic-bezier(.25,.8,.25,1)!important;transition:.3s cubic-bezier(.25,.8,.25,1)!important}.v-application .transition-swing{-webkit-transition:.3s cubic-bezier(.25,.8,.5,1)!important;transition:.3s cubic-bezier(.25,.8,.5,1)!important}.v-application .overflow-auto{overflow:auto!important}.v-application .overflow-hidden{overflow:hidden!important}.v-application .overflow-visible{overflow:visible!important}.v-application .overflow-x-auto{overflow-x:auto!important}.v-application .overflow-x-hidden{overflow-x:hidden!important}.v-application .overflow-y-auto{overflow-y:auto!important}.v-application .overflow-y-hidden{overflow-y:hidden!important}.v-application .d-none{display:none!important}.v-application .d-inline{display:inline!important}.v-application .d-inline-block{display:inline-block!important}.v-application .d-block{display:block!important}.v-application .d-table{display:table!important}.v-application .d-table-row{display:table-row!important}.v-application .d-table-cell{display:table-cell!important}.v-application .d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-none{float:none!important}.v-application .float-left{float:left!important}.v-application .float-right{float:right!important}.v-application .flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.v-application .flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.v-application .flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.v-application .flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.v-application .flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.v-application .flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.v-application .flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.v-application .flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.v-application .flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.v-application .flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.v-application .flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.v-application .flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.v-application .justify-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.v-application .justify-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.v-application .justify-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.v-application .justify-space-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.v-application .justify-space-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.v-application .align-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.v-application .align-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.v-application .align-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.v-application .align-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.v-application .align-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.v-application .align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.v-application .align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.v-application .align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.v-application .align-content-space-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.v-application .align-content-space-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.v-application .align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.v-application .align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.v-application .align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.v-application .align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.v-application .align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.v-application .align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.v-application .align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.v-application .order-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.v-application .order-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.v-application .order-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.v-application .order-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.v-application .order-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.v-application .order-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.v-application .order-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.v-application .order-6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.v-application .order-7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.v-application .order-8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.v-application .order-9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.v-application .order-10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.v-application .order-11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.v-application .order-12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.v-application .order-last{-webkit-box-ordinal-group:14!important;-ms-flex-order:13!important;order:13!important}.v-application .ma-0{margin:0!important}.v-application .ma-1{margin:4px!important}.v-application .ma-2{margin:8px!important}.v-application .ma-3{margin:12px!important}.v-application .ma-4{margin:16px!important}.v-application .ma-5{margin:20px!important}.v-application .ma-6{margin:24px!important}.v-application .ma-7{margin:28px!important}.v-application .ma-8{margin:32px!important}.v-application .ma-9{margin:36px!important}.v-application .ma-10{margin:40px!important}.v-application .ma-11{margin:44px!important}.v-application .ma-12{margin:48px!important}.v-application .ma-auto{margin:auto!important}.v-application .mx-0{margin-right:0!important;margin-left:0!important}.v-application .mx-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-0{margin-top:0!important}.v-application .mt-1{margin-top:4px!important}.v-application .mt-2{margin-top:8px!important}.v-application .mt-3{margin-top:12px!important}.v-application .mt-4{margin-top:16px!important}.v-application .mt-5{margin-top:20px!important}.v-application .mt-6{margin-top:24px!important}.v-application .mt-7{margin-top:28px!important}.v-application .mt-8{margin-top:32px!important}.v-application .mt-9{margin-top:36px!important}.v-application .mt-10{margin-top:40px!important}.v-application .mt-11{margin-top:44px!important}.v-application .mt-12{margin-top:48px!important}.v-application .mt-auto{margin-top:auto!important}.v-application .mr-0{margin-right:0!important}.v-application .mr-1{margin-right:4px!important}.v-application .mr-2{margin-right:8px!important}.v-application .mr-3{margin-right:12px!important}.v-application .mr-4{margin-right:16px!important}.v-application .mr-5{margin-right:20px!important}.v-application .mr-6{margin-right:24px!important}.v-application .mr-7{margin-right:28px!important}.v-application .mr-8{margin-right:32px!important}.v-application .mr-9{margin-right:36px!important}.v-application .mr-10{margin-right:40px!important}.v-application .mr-11{margin-right:44px!important}.v-application .mr-12{margin-right:48px!important}.v-application .mr-auto{margin-right:auto!important}.v-application .mb-0{margin-bottom:0!important}.v-application .mb-1{margin-bottom:4px!important}.v-application .mb-2{margin-bottom:8px!important}.v-application .mb-3{margin-bottom:12px!important}.v-application .mb-4{margin-bottom:16px!important}.v-application .mb-5{margin-bottom:20px!important}.v-application .mb-6{margin-bottom:24px!important}.v-application .mb-7{margin-bottom:28px!important}.v-application .mb-8{margin-bottom:32px!important}.v-application .mb-9{margin-bottom:36px!important}.v-application .mb-10{margin-bottom:40px!important}.v-application .mb-11{margin-bottom:44px!important}.v-application .mb-12{margin-bottom:48px!important}.v-application .mb-auto{margin-bottom:auto!important}.v-application .ml-0{margin-left:0!important}.v-application .ml-1{margin-left:4px!important}.v-application .ml-2{margin-left:8px!important}.v-application .ml-3{margin-left:12px!important}.v-application .ml-4{margin-left:16px!important}.v-application .ml-5{margin-left:20px!important}.v-application .ml-6{margin-left:24px!important}.v-application .ml-7{margin-left:28px!important}.v-application .ml-8{margin-left:32px!important}.v-application .ml-9{margin-left:36px!important}.v-application .ml-10{margin-left:40px!important}.v-application .ml-11{margin-left:44px!important}.v-application .ml-12{margin-left:48px!important}.v-application .ml-auto{margin-left:auto!important}.v-application--is-ltr .ms-0{margin-left:0!important}.v-application--is-rtl .ms-0{margin-right:0!important}.v-application--is-ltr .ms-1{margin-left:4px!important}.v-application--is-rtl .ms-1{margin-right:4px!important}.v-application--is-ltr .ms-2{margin-left:8px!important}.v-application--is-rtl .ms-2{margin-right:8px!important}.v-application--is-ltr .ms-3{margin-left:12px!important}.v-application--is-rtl .ms-3{margin-right:12px!important}.v-application--is-ltr .ms-4{margin-left:16px!important}.v-application--is-rtl .ms-4{margin-right:16px!important}.v-application--is-ltr .ms-5{margin-left:20px!important}.v-application--is-rtl .ms-5{margin-right:20px!important}.v-application--is-ltr .ms-6{margin-left:24px!important}.v-application--is-rtl .ms-6{margin-right:24px!important}.v-application--is-ltr .ms-7{margin-left:28px!important}.v-application--is-rtl .ms-7{margin-right:28px!important}.v-application--is-ltr .ms-8{margin-left:32px!important}.v-application--is-rtl .ms-8{margin-right:32px!important}.v-application--is-ltr .ms-9{margin-left:36px!important}.v-application--is-rtl .ms-9{margin-right:36px!important}.v-application--is-ltr .ms-10{margin-left:40px!important}.v-application--is-rtl .ms-10{margin-right:40px!important}.v-application--is-ltr .ms-11{margin-left:44px!important}.v-application--is-rtl .ms-11{margin-right:44px!important}.v-application--is-ltr .ms-12{margin-left:48px!important}.v-application--is-rtl .ms-12{margin-right:48px!important}.v-application--is-ltr .ms-auto{margin-left:auto!important}.v-application--is-rtl .ms-auto{margin-right:auto!important}.v-application--is-ltr .me-0{margin-right:0!important}.v-application--is-rtl .me-0{margin-left:0!important}.v-application--is-ltr .me-1{margin-right:4px!important}.v-application--is-rtl .me-1{margin-left:4px!important}.v-application--is-ltr .me-2{margin-right:8px!important}.v-application--is-rtl .me-2{margin-left:8px!important}.v-application--is-ltr .me-3{margin-right:12px!important}.v-application--is-rtl .me-3{margin-left:12px!important}.v-application--is-ltr .me-4{margin-right:16px!important}.v-application--is-rtl .me-4{margin-left:16px!important}.v-application--is-ltr .me-5{margin-right:20px!important}.v-application--is-rtl .me-5{margin-left:20px!important}.v-application--is-ltr .me-6{margin-right:24px!important}.v-application--is-rtl .me-6{margin-left:24px!important}.v-application--is-ltr .me-7{margin-right:28px!important}.v-application--is-rtl .me-7{margin-left:28px!important}.v-application--is-ltr .me-8{margin-right:32px!important}.v-application--is-rtl .me-8{margin-left:32px!important}.v-application--is-ltr .me-9{margin-right:36px!important}.v-application--is-rtl .me-9{margin-left:36px!important}.v-application--is-ltr .me-10{margin-right:40px!important}.v-application--is-rtl .me-10{margin-left:40px!important}.v-application--is-ltr .me-11{margin-right:44px!important}.v-application--is-rtl .me-11{margin-left:44px!important}.v-application--is-ltr .me-12{margin-right:48px!important}.v-application--is-rtl .me-12{margin-left:48px!important}.v-application--is-ltr .me-auto{margin-right:auto!important}.v-application--is-rtl .me-auto{margin-left:auto!important}.v-application .ma-n1{margin:-4px!important}.v-application .ma-n2{margin:-8px!important}.v-application .ma-n3{margin:-12px!important}.v-application .ma-n4{margin:-16px!important}.v-application .ma-n5{margin:-20px!important}.v-application .ma-n6{margin:-24px!important}.v-application .ma-n7{margin:-28px!important}.v-application .ma-n8{margin:-32px!important}.v-application .ma-n9{margin:-36px!important}.v-application .ma-n10{margin:-40px!important}.v-application .ma-n11{margin:-44px!important}.v-application .ma-n12{margin:-48px!important}.v-application .mx-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .my-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .mt-n1{margin-top:-4px!important}.v-application .mt-n2{margin-top:-8px!important}.v-application .mt-n3{margin-top:-12px!important}.v-application .mt-n4{margin-top:-16px!important}.v-application .mt-n5{margin-top:-20px!important}.v-application .mt-n6{margin-top:-24px!important}.v-application .mt-n7{margin-top:-28px!important}.v-application .mt-n8{margin-top:-32px!important}.v-application .mt-n9{margin-top:-36px!important}.v-application .mt-n10{margin-top:-40px!important}.v-application .mt-n11{margin-top:-44px!important}.v-application .mt-n12{margin-top:-48px!important}.v-application .mr-n1{margin-right:-4px!important}.v-application .mr-n2{margin-right:-8px!important}.v-application .mr-n3{margin-right:-12px!important}.v-application .mr-n4{margin-right:-16px!important}.v-application .mr-n5{margin-right:-20px!important}.v-application .mr-n6{margin-right:-24px!important}.v-application .mr-n7{margin-right:-28px!important}.v-application .mr-n8{margin-right:-32px!important}.v-application .mr-n9{margin-right:-36px!important}.v-application .mr-n10{margin-right:-40px!important}.v-application .mr-n11{margin-right:-44px!important}.v-application .mr-n12{margin-right:-48px!important}.v-application .mb-n1{margin-bottom:-4px!important}.v-application .mb-n2{margin-bottom:-8px!important}.v-application .mb-n3{margin-bottom:-12px!important}.v-application .mb-n4{margin-bottom:-16px!important}.v-application .mb-n5{margin-bottom:-20px!important}.v-application .mb-n6{margin-bottom:-24px!important}.v-application .mb-n7{margin-bottom:-28px!important}.v-application .mb-n8{margin-bottom:-32px!important}.v-application .mb-n9{margin-bottom:-36px!important}.v-application .mb-n10{margin-bottom:-40px!important}.v-application .mb-n11{margin-bottom:-44px!important}.v-application .mb-n12{margin-bottom:-48px!important}.v-application .ml-n1{margin-left:-4px!important}.v-application .ml-n2{margin-left:-8px!important}.v-application .ml-n3{margin-left:-12px!important}.v-application .ml-n4{margin-left:-16px!important}.v-application .ml-n5{margin-left:-20px!important}.v-application .ml-n6{margin-left:-24px!important}.v-application .ml-n7{margin-left:-28px!important}.v-application .ml-n8{margin-left:-32px!important}.v-application .ml-n9{margin-left:-36px!important}.v-application .ml-n10{margin-left:-40px!important}.v-application .ml-n11{margin-left:-44px!important}.v-application .ml-n12{margin-left:-48px!important}.v-application--is-ltr .ms-n1{margin-left:-4px!important}.v-application--is-rtl .ms-n1{margin-right:-4px!important}.v-application--is-ltr .ms-n2{margin-left:-8px!important}.v-application--is-rtl .ms-n2{margin-right:-8px!important}.v-application--is-ltr .ms-n3{margin-left:-12px!important}.v-application--is-rtl .ms-n3{margin-right:-12px!important}.v-application--is-ltr .ms-n4{margin-left:-16px!important}.v-application--is-rtl .ms-n4{margin-right:-16px!important}.v-application--is-ltr .ms-n5{margin-left:-20px!important}.v-application--is-rtl .ms-n5{margin-right:-20px!important}.v-application--is-ltr .ms-n6{margin-left:-24px!important}.v-application--is-rtl .ms-n6{margin-right:-24px!important}.v-application--is-ltr .ms-n7{margin-left:-28px!important}.v-application--is-rtl .ms-n7{margin-right:-28px!important}.v-application--is-ltr .ms-n8{margin-left:-32px!important}.v-application--is-rtl .ms-n8{margin-right:-32px!important}.v-application--is-ltr .ms-n9{margin-left:-36px!important}.v-application--is-rtl .ms-n9{margin-right:-36px!important}.v-application--is-ltr .ms-n10{margin-left:-40px!important}.v-application--is-rtl .ms-n10{margin-right:-40px!important}.v-application--is-ltr .ms-n11{margin-left:-44px!important}.v-application--is-rtl .ms-n11{margin-right:-44px!important}.v-application--is-ltr .ms-n12{margin-left:-48px!important}.v-application--is-rtl .ms-n12{margin-right:-48px!important}.v-application--is-ltr .me-n1{margin-right:-4px!important}.v-application--is-rtl .me-n1{margin-left:-4px!important}.v-application--is-ltr .me-n2{margin-right:-8px!important}.v-application--is-rtl .me-n2{margin-left:-8px!important}.v-application--is-ltr .me-n3{margin-right:-12px!important}.v-application--is-rtl .me-n3{margin-left:-12px!important}.v-application--is-ltr .me-n4{margin-right:-16px!important}.v-application--is-rtl .me-n4{margin-left:-16px!important}.v-application--is-ltr .me-n5{margin-right:-20px!important}.v-application--is-rtl .me-n5{margin-left:-20px!important}.v-application--is-ltr .me-n6{margin-right:-24px!important}.v-application--is-rtl .me-n6{margin-left:-24px!important}.v-application--is-ltr .me-n7{margin-right:-28px!important}.v-application--is-rtl .me-n7{margin-left:-28px!important}.v-application--is-ltr .me-n8{margin-right:-32px!important}.v-application--is-rtl .me-n8{margin-left:-32px!important}.v-application--is-ltr .me-n9{margin-right:-36px!important}.v-application--is-rtl .me-n9{margin-left:-36px!important}.v-application--is-ltr .me-n10{margin-right:-40px!important}.v-application--is-rtl .me-n10{margin-left:-40px!important}.v-application--is-ltr .me-n11{margin-right:-44px!important}.v-application--is-rtl .me-n11{margin-left:-44px!important}.v-application--is-ltr .me-n12{margin-right:-48px!important}.v-application--is-rtl .me-n12{margin-left:-48px!important}.v-application .pa-0{padding:0!important}.v-application .pa-1{padding:4px!important}.v-application .pa-2{padding:8px!important}.v-application .pa-3{padding:12px!important}.v-application .pa-4{padding:16px!important}.v-application .pa-5{padding:20px!important}.v-application .pa-6{padding:24px!important}.v-application .pa-7{padding:28px!important}.v-application .pa-8{padding:32px!important}.v-application .pa-9{padding:36px!important}.v-application .pa-10{padding:40px!important}.v-application .pa-11{padding:44px!important}.v-application .pa-12{padding:48px!important}.v-application .px-0{padding-right:0!important;padding-left:0!important}.v-application .px-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-12{padding-right:48px!important;padding-left:48px!important}.v-application .py-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .pt-0{padding-top:0!important}.v-application .pt-1{padding-top:4px!important}.v-application .pt-2{padding-top:8px!important}.v-application .pt-3{padding-top:12px!important}.v-application .pt-4{padding-top:16px!important}.v-application .pt-5{padding-top:20px!important}.v-application .pt-6{padding-top:24px!important}.v-application .pt-7{padding-top:28px!important}.v-application .pt-8{padding-top:32px!important}.v-application .pt-9{padding-top:36px!important}.v-application .pt-10{padding-top:40px!important}.v-application .pt-11{padding-top:44px!important}.v-application .pt-12{padding-top:48px!important}.v-application .pr-0{padding-right:0!important}.v-application .pr-1{padding-right:4px!important}.v-application .pr-2{padding-right:8px!important}.v-application .pr-3{padding-right:12px!important}.v-application .pr-4{padding-right:16px!important}.v-application .pr-5{padding-right:20px!important}.v-application .pr-6{padding-right:24px!important}.v-application .pr-7{padding-right:28px!important}.v-application .pr-8{padding-right:32px!important}.v-application .pr-9{padding-right:36px!important}.v-application .pr-10{padding-right:40px!important}.v-application .pr-11{padding-right:44px!important}.v-application .pr-12{padding-right:48px!important}.v-application .pb-0{padding-bottom:0!important}.v-application .pb-1{padding-bottom:4px!important}.v-application .pb-2{padding-bottom:8px!important}.v-application .pb-3{padding-bottom:12px!important}.v-application .pb-4{padding-bottom:16px!important}.v-application .pb-5{padding-bottom:20px!important}.v-application .pb-6{padding-bottom:24px!important}.v-application .pb-7{padding-bottom:28px!important}.v-application .pb-8{padding-bottom:32px!important}.v-application .pb-9{padding-bottom:36px!important}.v-application .pb-10{padding-bottom:40px!important}.v-application .pb-11{padding-bottom:44px!important}.v-application .pb-12{padding-bottom:48px!important}.v-application .pl-0{padding-left:0!important}.v-application .pl-1{padding-left:4px!important}.v-application .pl-2{padding-left:8px!important}.v-application .pl-3{padding-left:12px!important}.v-application .pl-4{padding-left:16px!important}.v-application .pl-5{padding-left:20px!important}.v-application .pl-6{padding-left:24px!important}.v-application .pl-7{padding-left:28px!important}.v-application .pl-8{padding-left:32px!important}.v-application .pl-9{padding-left:36px!important}.v-application .pl-10{padding-left:40px!important}.v-application .pl-11{padding-left:44px!important}.v-application .pl-12{padding-left:48px!important}.v-application--is-ltr .ps-0{padding-left:0!important}.v-application--is-rtl .ps-0{padding-right:0!important}.v-application--is-ltr .ps-1{padding-left:4px!important}.v-application--is-rtl .ps-1{padding-right:4px!important}.v-application--is-ltr .ps-2{padding-left:8px!important}.v-application--is-rtl .ps-2{padding-right:8px!important}.v-application--is-ltr .ps-3{padding-left:12px!important}.v-application--is-rtl .ps-3{padding-right:12px!important}.v-application--is-ltr .ps-4{padding-left:16px!important}.v-application--is-rtl .ps-4{padding-right:16px!important}.v-application--is-ltr .ps-5{padding-left:20px!important}.v-application--is-rtl .ps-5{padding-right:20px!important}.v-application--is-ltr .ps-6{padding-left:24px!important}.v-application--is-rtl .ps-6{padding-right:24px!important}.v-application--is-ltr .ps-7{padding-left:28px!important}.v-application--is-rtl .ps-7{padding-right:28px!important}.v-application--is-ltr .ps-8{padding-left:32px!important}.v-application--is-rtl .ps-8{padding-right:32px!important}.v-application--is-ltr .ps-9{padding-left:36px!important}.v-application--is-rtl .ps-9{padding-right:36px!important}.v-application--is-ltr .ps-10{padding-left:40px!important}.v-application--is-rtl .ps-10{padding-right:40px!important}.v-application--is-ltr .ps-11{padding-left:44px!important}.v-application--is-rtl .ps-11{padding-right:44px!important}.v-application--is-ltr .ps-12{padding-left:48px!important}.v-application--is-rtl .ps-12{padding-right:48px!important}.v-application--is-ltr .pe-0{padding-right:0!important}.v-application--is-rtl .pe-0{padding-left:0!important}.v-application--is-ltr .pe-1{padding-right:4px!important}.v-application--is-rtl .pe-1{padding-left:4px!important}.v-application--is-ltr .pe-2{padding-right:8px!important}.v-application--is-rtl .pe-2{padding-left:8px!important}.v-application--is-ltr .pe-3{padding-right:12px!important}.v-application--is-rtl .pe-3{padding-left:12px!important}.v-application--is-ltr .pe-4{padding-right:16px!important}.v-application--is-rtl .pe-4{padding-left:16px!important}.v-application--is-ltr .pe-5{padding-right:20px!important}.v-application--is-rtl .pe-5{padding-left:20px!important}.v-application--is-ltr .pe-6{padding-right:24px!important}.v-application--is-rtl .pe-6{padding-left:24px!important}.v-application--is-ltr .pe-7{padding-right:28px!important}.v-application--is-rtl .pe-7{padding-left:28px!important}.v-application--is-ltr .pe-8{padding-right:32px!important}.v-application--is-rtl .pe-8{padding-left:32px!important}.v-application--is-ltr .pe-9{padding-right:36px!important}.v-application--is-rtl .pe-9{padding-left:36px!important}.v-application--is-ltr .pe-10{padding-right:40px!important}.v-application--is-rtl .pe-10{padding-left:40px!important}.v-application--is-ltr .pe-11{padding-right:44px!important}.v-application--is-rtl .pe-11{padding-left:44px!important}.v-application--is-ltr .pe-12{padding-right:48px!important}.v-application--is-rtl .pe-12{padding-left:48px!important}.v-application .text-left{text-align:left!important}.v-application .text-right{text-align:right!important}.v-application .text-center{text-align:center!important}.v-application .text-justify{text-align:justify!important}.v-application .text-start{text-align:start!important}.v-application .text-end{text-align:end!important}.v-application .text-wrap{white-space:normal!important}.v-application .text-no-wrap{white-space:nowrap!important}.v-application .text-break{overflow-wrap:break-word!important;word-break:break-word!important}.v-application .text-truncate{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.v-application .text-none{text-transform:none!important}.v-application .text-capitalize{text-transform:capitalize!important}.v-application .text-lowercase{text-transform:lowercase!important}.v-application .text-uppercase{text-transform:uppercase!important}@media(min-width:600px){.v-application .d-sm-none{display:none!important}.v-application .d-sm-inline{display:inline!important}.v-application .d-sm-inline-block{display:inline-block!important}.v-application .d-sm-block{display:block!important}.v-application .d-sm-table{display:table!important}.v-application .d-sm-table-row{display:table-row!important}.v-application .d-sm-table-cell{display:table-cell!important}.v-application .d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-sm-none{float:none!important}.v-application .float-sm-left{float:left!important}.v-application .float-sm-right{float:right!important}.v-application .flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.v-application .flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.v-application .flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.v-application .flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.v-application .flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.v-application .flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.v-application .flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.v-application .flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.v-application .flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.v-application .flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.v-application .flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.v-application .flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.v-application .justify-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.v-application .justify-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.v-application .justify-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.v-application .justify-sm-space-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.v-application .justify-sm-space-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.v-application .align-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.v-application .align-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.v-application .align-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.v-application .align-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.v-application .align-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.v-application .align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.v-application .align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.v-application .align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.v-application .align-content-sm-space-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.v-application .align-content-sm-space-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.v-application .align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.v-application .align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.v-application .align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.v-application .align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.v-application .align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.v-application .align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.v-application .align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.v-application .order-sm-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.v-application .order-sm-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.v-application .order-sm-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.v-application .order-sm-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.v-application .order-sm-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.v-application .order-sm-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.v-application .order-sm-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.v-application .order-sm-6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.v-application .order-sm-7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.v-application .order-sm-8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.v-application .order-sm-9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.v-application .order-sm-10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.v-application .order-sm-11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.v-application .order-sm-12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.v-application .order-sm-last{-webkit-box-ordinal-group:14!important;-ms-flex-order:13!important;order:13!important}.v-application .ma-sm-0{margin:0!important}.v-application .ma-sm-1{margin:4px!important}.v-application .ma-sm-2{margin:8px!important}.v-application .ma-sm-3{margin:12px!important}.v-application .ma-sm-4{margin:16px!important}.v-application .ma-sm-5{margin:20px!important}.v-application .ma-sm-6{margin:24px!important}.v-application .ma-sm-7{margin:28px!important}.v-application .ma-sm-8{margin:32px!important}.v-application .ma-sm-9{margin:36px!important}.v-application .ma-sm-10{margin:40px!important}.v-application .ma-sm-11{margin:44px!important}.v-application .ma-sm-12{margin:48px!important}.v-application .ma-sm-auto{margin:auto!important}.v-application .mx-sm-0{margin-right:0!important;margin-left:0!important}.v-application .mx-sm-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-sm-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-sm-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-sm-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-sm-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-sm-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-sm-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-sm-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-sm-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-sm-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-sm-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-sm-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-sm-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-sm-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-sm-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-sm-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-sm-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-sm-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-sm-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-sm-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-sm-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-sm-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-sm-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-sm-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-sm-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-sm-0{margin-top:0!important}.v-application .mt-sm-1{margin-top:4px!important}.v-application .mt-sm-2{margin-top:8px!important}.v-application .mt-sm-3{margin-top:12px!important}.v-application .mt-sm-4{margin-top:16px!important}.v-application .mt-sm-5{margin-top:20px!important}.v-application .mt-sm-6{margin-top:24px!important}.v-application .mt-sm-7{margin-top:28px!important}.v-application .mt-sm-8{margin-top:32px!important}.v-application .mt-sm-9{margin-top:36px!important}.v-application .mt-sm-10{margin-top:40px!important}.v-application .mt-sm-11{margin-top:44px!important}.v-application .mt-sm-12{margin-top:48px!important}.v-application .mt-sm-auto{margin-top:auto!important}.v-application .mr-sm-0{margin-right:0!important}.v-application .mr-sm-1{margin-right:4px!important}.v-application .mr-sm-2{margin-right:8px!important}.v-application .mr-sm-3{margin-right:12px!important}.v-application .mr-sm-4{margin-right:16px!important}.v-application .mr-sm-5{margin-right:20px!important}.v-application .mr-sm-6{margin-right:24px!important}.v-application .mr-sm-7{margin-right:28px!important}.v-application .mr-sm-8{margin-right:32px!important}.v-application .mr-sm-9{margin-right:36px!important}.v-application .mr-sm-10{margin-right:40px!important}.v-application .mr-sm-11{margin-right:44px!important}.v-application .mr-sm-12{margin-right:48px!important}.v-application .mr-sm-auto{margin-right:auto!important}.v-application .mb-sm-0{margin-bottom:0!important}.v-application .mb-sm-1{margin-bottom:4px!important}.v-application .mb-sm-2{margin-bottom:8px!important}.v-application .mb-sm-3{margin-bottom:12px!important}.v-application .mb-sm-4{margin-bottom:16px!important}.v-application .mb-sm-5{margin-bottom:20px!important}.v-application .mb-sm-6{margin-bottom:24px!important}.v-application .mb-sm-7{margin-bottom:28px!important}.v-application .mb-sm-8{margin-bottom:32px!important}.v-application .mb-sm-9{margin-bottom:36px!important}.v-application .mb-sm-10{margin-bottom:40px!important}.v-application .mb-sm-11{margin-bottom:44px!important}.v-application .mb-sm-12{margin-bottom:48px!important}.v-application .mb-sm-auto{margin-bottom:auto!important}.v-application .ml-sm-0{margin-left:0!important}.v-application .ml-sm-1{margin-left:4px!important}.v-application .ml-sm-2{margin-left:8px!important}.v-application .ml-sm-3{margin-left:12px!important}.v-application .ml-sm-4{margin-left:16px!important}.v-application .ml-sm-5{margin-left:20px!important}.v-application .ml-sm-6{margin-left:24px!important}.v-application .ml-sm-7{margin-left:28px!important}.v-application .ml-sm-8{margin-left:32px!important}.v-application .ml-sm-9{margin-left:36px!important}.v-application .ml-sm-10{margin-left:40px!important}.v-application .ml-sm-11{margin-left:44px!important}.v-application .ml-sm-12{margin-left:48px!important}.v-application .ml-sm-auto{margin-left:auto!important}.v-application--is-ltr .ms-sm-0{margin-left:0!important}.v-application--is-rtl .ms-sm-0{margin-right:0!important}.v-application--is-ltr .ms-sm-1{margin-left:4px!important}.v-application--is-rtl .ms-sm-1{margin-right:4px!important}.v-application--is-ltr .ms-sm-2{margin-left:8px!important}.v-application--is-rtl .ms-sm-2{margin-right:8px!important}.v-application--is-ltr .ms-sm-3{margin-left:12px!important}.v-application--is-rtl .ms-sm-3{margin-right:12px!important}.v-application--is-ltr .ms-sm-4{margin-left:16px!important}.v-application--is-rtl .ms-sm-4{margin-right:16px!important}.v-application--is-ltr .ms-sm-5{margin-left:20px!important}.v-application--is-rtl .ms-sm-5{margin-right:20px!important}.v-application--is-ltr .ms-sm-6{margin-left:24px!important}.v-application--is-rtl .ms-sm-6{margin-right:24px!important}.v-application--is-ltr .ms-sm-7{margin-left:28px!important}.v-application--is-rtl .ms-sm-7{margin-right:28px!important}.v-application--is-ltr .ms-sm-8{margin-left:32px!important}.v-application--is-rtl .ms-sm-8{margin-right:32px!important}.v-application--is-ltr .ms-sm-9{margin-left:36px!important}.v-application--is-rtl .ms-sm-9{margin-right:36px!important}.v-application--is-ltr .ms-sm-10{margin-left:40px!important}.v-application--is-rtl .ms-sm-10{margin-right:40px!important}.v-application--is-ltr .ms-sm-11{margin-left:44px!important}.v-application--is-rtl .ms-sm-11{margin-right:44px!important}.v-application--is-ltr .ms-sm-12{margin-left:48px!important}.v-application--is-rtl .ms-sm-12{margin-right:48px!important}.v-application--is-ltr .ms-sm-auto{margin-left:auto!important}.v-application--is-rtl .ms-sm-auto{margin-right:auto!important}.v-application--is-ltr .me-sm-0{margin-right:0!important}.v-application--is-rtl .me-sm-0{margin-left:0!important}.v-application--is-ltr .me-sm-1{margin-right:4px!important}.v-application--is-rtl .me-sm-1{margin-left:4px!important}.v-application--is-ltr .me-sm-2{margin-right:8px!important}.v-application--is-rtl .me-sm-2{margin-left:8px!important}.v-application--is-ltr .me-sm-3{margin-right:12px!important}.v-application--is-rtl .me-sm-3{margin-left:12px!important}.v-application--is-ltr .me-sm-4{margin-right:16px!important}.v-application--is-rtl .me-sm-4{margin-left:16px!important}.v-application--is-ltr .me-sm-5{margin-right:20px!important}.v-application--is-rtl .me-sm-5{margin-left:20px!important}.v-application--is-ltr .me-sm-6{margin-right:24px!important}.v-application--is-rtl .me-sm-6{margin-left:24px!important}.v-application--is-ltr .me-sm-7{margin-right:28px!important}.v-application--is-rtl .me-sm-7{margin-left:28px!important}.v-application--is-ltr .me-sm-8{margin-right:32px!important}.v-application--is-rtl .me-sm-8{margin-left:32px!important}.v-application--is-ltr .me-sm-9{margin-right:36px!important}.v-application--is-rtl .me-sm-9{margin-left:36px!important}.v-application--is-ltr .me-sm-10{margin-right:40px!important}.v-application--is-rtl .me-sm-10{margin-left:40px!important}.v-application--is-ltr .me-sm-11{margin-right:44px!important}.v-application--is-rtl .me-sm-11{margin-left:44px!important}.v-application--is-ltr .me-sm-12{margin-right:48px!important}.v-application--is-rtl .me-sm-12{margin-left:48px!important}.v-application--is-ltr .me-sm-auto{margin-right:auto!important}.v-application--is-rtl .me-sm-auto{margin-left:auto!important}.v-application .ma-sm-n1{margin:-4px!important}.v-application .ma-sm-n2{margin:-8px!important}.v-application .ma-sm-n3{margin:-12px!important}.v-application .ma-sm-n4{margin:-16px!important}.v-application .ma-sm-n5{margin:-20px!important}.v-application .ma-sm-n6{margin:-24px!important}.v-application .ma-sm-n7{margin:-28px!important}.v-application .ma-sm-n8{margin:-32px!important}.v-application .ma-sm-n9{margin:-36px!important}.v-application .ma-sm-n10{margin:-40px!important}.v-application .ma-sm-n11{margin:-44px!important}.v-application .ma-sm-n12{margin:-48px!important}.v-application .mx-sm-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-sm-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-sm-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-sm-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-sm-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-sm-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-sm-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-sm-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-sm-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-sm-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-sm-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-sm-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .my-sm-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-sm-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-sm-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-sm-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-sm-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-sm-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-sm-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-sm-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-sm-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-sm-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-sm-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-sm-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .mt-sm-n1{margin-top:-4px!important}.v-application .mt-sm-n2{margin-top:-8px!important}.v-application .mt-sm-n3{margin-top:-12px!important}.v-application .mt-sm-n4{margin-top:-16px!important}.v-application .mt-sm-n5{margin-top:-20px!important}.v-application .mt-sm-n6{margin-top:-24px!important}.v-application .mt-sm-n7{margin-top:-28px!important}.v-application .mt-sm-n8{margin-top:-32px!important}.v-application .mt-sm-n9{margin-top:-36px!important}.v-application .mt-sm-n10{margin-top:-40px!important}.v-application .mt-sm-n11{margin-top:-44px!important}.v-application .mt-sm-n12{margin-top:-48px!important}.v-application .mr-sm-n1{margin-right:-4px!important}.v-application .mr-sm-n2{margin-right:-8px!important}.v-application .mr-sm-n3{margin-right:-12px!important}.v-application .mr-sm-n4{margin-right:-16px!important}.v-application .mr-sm-n5{margin-right:-20px!important}.v-application .mr-sm-n6{margin-right:-24px!important}.v-application .mr-sm-n7{margin-right:-28px!important}.v-application .mr-sm-n8{margin-right:-32px!important}.v-application .mr-sm-n9{margin-right:-36px!important}.v-application .mr-sm-n10{margin-right:-40px!important}.v-application .mr-sm-n11{margin-right:-44px!important}.v-application .mr-sm-n12{margin-right:-48px!important}.v-application .mb-sm-n1{margin-bottom:-4px!important}.v-application .mb-sm-n2{margin-bottom:-8px!important}.v-application .mb-sm-n3{margin-bottom:-12px!important}.v-application .mb-sm-n4{margin-bottom:-16px!important}.v-application .mb-sm-n5{margin-bottom:-20px!important}.v-application .mb-sm-n6{margin-bottom:-24px!important}.v-application .mb-sm-n7{margin-bottom:-28px!important}.v-application .mb-sm-n8{margin-bottom:-32px!important}.v-application .mb-sm-n9{margin-bottom:-36px!important}.v-application .mb-sm-n10{margin-bottom:-40px!important}.v-application .mb-sm-n11{margin-bottom:-44px!important}.v-application .mb-sm-n12{margin-bottom:-48px!important}.v-application .ml-sm-n1{margin-left:-4px!important}.v-application .ml-sm-n2{margin-left:-8px!important}.v-application .ml-sm-n3{margin-left:-12px!important}.v-application .ml-sm-n4{margin-left:-16px!important}.v-application .ml-sm-n5{margin-left:-20px!important}.v-application .ml-sm-n6{margin-left:-24px!important}.v-application .ml-sm-n7{margin-left:-28px!important}.v-application .ml-sm-n8{margin-left:-32px!important}.v-application .ml-sm-n9{margin-left:-36px!important}.v-application .ml-sm-n10{margin-left:-40px!important}.v-application .ml-sm-n11{margin-left:-44px!important}.v-application .ml-sm-n12{margin-left:-48px!important}.v-application--is-ltr .ms-sm-n1{margin-left:-4px!important}.v-application--is-rtl .ms-sm-n1{margin-right:-4px!important}.v-application--is-ltr .ms-sm-n2{margin-left:-8px!important}.v-application--is-rtl .ms-sm-n2{margin-right:-8px!important}.v-application--is-ltr .ms-sm-n3{margin-left:-12px!important}.v-application--is-rtl .ms-sm-n3{margin-right:-12px!important}.v-application--is-ltr .ms-sm-n4{margin-left:-16px!important}.v-application--is-rtl .ms-sm-n4{margin-right:-16px!important}.v-application--is-ltr .ms-sm-n5{margin-left:-20px!important}.v-application--is-rtl .ms-sm-n5{margin-right:-20px!important}.v-application--is-ltr .ms-sm-n6{margin-left:-24px!important}.v-application--is-rtl .ms-sm-n6{margin-right:-24px!important}.v-application--is-ltr .ms-sm-n7{margin-left:-28px!important}.v-application--is-rtl .ms-sm-n7{margin-right:-28px!important}.v-application--is-ltr .ms-sm-n8{margin-left:-32px!important}.v-application--is-rtl .ms-sm-n8{margin-right:-32px!important}.v-application--is-ltr .ms-sm-n9{margin-left:-36px!important}.v-application--is-rtl .ms-sm-n9{margin-right:-36px!important}.v-application--is-ltr .ms-sm-n10{margin-left:-40px!important}.v-application--is-rtl .ms-sm-n10{margin-right:-40px!important}.v-application--is-ltr .ms-sm-n11{margin-left:-44px!important}.v-application--is-rtl .ms-sm-n11{margin-right:-44px!important}.v-application--is-ltr .ms-sm-n12{margin-left:-48px!important}.v-application--is-rtl .ms-sm-n12{margin-right:-48px!important}.v-application--is-ltr .me-sm-n1{margin-right:-4px!important}.v-application--is-rtl .me-sm-n1{margin-left:-4px!important}.v-application--is-ltr .me-sm-n2{margin-right:-8px!important}.v-application--is-rtl .me-sm-n2{margin-left:-8px!important}.v-application--is-ltr .me-sm-n3{margin-right:-12px!important}.v-application--is-rtl .me-sm-n3{margin-left:-12px!important}.v-application--is-ltr .me-sm-n4{margin-right:-16px!important}.v-application--is-rtl .me-sm-n4{margin-left:-16px!important}.v-application--is-ltr .me-sm-n5{margin-right:-20px!important}.v-application--is-rtl .me-sm-n5{margin-left:-20px!important}.v-application--is-ltr .me-sm-n6{margin-right:-24px!important}.v-application--is-rtl .me-sm-n6{margin-left:-24px!important}.v-application--is-ltr .me-sm-n7{margin-right:-28px!important}.v-application--is-rtl .me-sm-n7{margin-left:-28px!important}.v-application--is-ltr .me-sm-n8{margin-right:-32px!important}.v-application--is-rtl .me-sm-n8{margin-left:-32px!important}.v-application--is-ltr .me-sm-n9{margin-right:-36px!important}.v-application--is-rtl .me-sm-n9{margin-left:-36px!important}.v-application--is-ltr .me-sm-n10{margin-right:-40px!important}.v-application--is-rtl .me-sm-n10{margin-left:-40px!important}.v-application--is-ltr .me-sm-n11{margin-right:-44px!important}.v-application--is-rtl .me-sm-n11{margin-left:-44px!important}.v-application--is-ltr .me-sm-n12{margin-right:-48px!important}.v-application--is-rtl .me-sm-n12{margin-left:-48px!important}.v-application .pa-sm-0{padding:0!important}.v-application .pa-sm-1{padding:4px!important}.v-application .pa-sm-2{padding:8px!important}.v-application .pa-sm-3{padding:12px!important}.v-application .pa-sm-4{padding:16px!important}.v-application .pa-sm-5{padding:20px!important}.v-application .pa-sm-6{padding:24px!important}.v-application .pa-sm-7{padding:28px!important}.v-application .pa-sm-8{padding:32px!important}.v-application .pa-sm-9{padding:36px!important}.v-application .pa-sm-10{padding:40px!important}.v-application .pa-sm-11{padding:44px!important}.v-application .pa-sm-12{padding:48px!important}.v-application .px-sm-0{padding-right:0!important;padding-left:0!important}.v-application .px-sm-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-sm-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-sm-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-sm-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-sm-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-sm-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-sm-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-sm-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-sm-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-sm-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-sm-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-sm-12{padding-right:48px!important;padding-left:48px!important}.v-application .py-sm-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-sm-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-sm-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-sm-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-sm-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-sm-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-sm-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-sm-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-sm-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-sm-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-sm-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-sm-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-sm-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .pt-sm-0{padding-top:0!important}.v-application .pt-sm-1{padding-top:4px!important}.v-application .pt-sm-2{padding-top:8px!important}.v-application .pt-sm-3{padding-top:12px!important}.v-application .pt-sm-4{padding-top:16px!important}.v-application .pt-sm-5{padding-top:20px!important}.v-application .pt-sm-6{padding-top:24px!important}.v-application .pt-sm-7{padding-top:28px!important}.v-application .pt-sm-8{padding-top:32px!important}.v-application .pt-sm-9{padding-top:36px!important}.v-application .pt-sm-10{padding-top:40px!important}.v-application .pt-sm-11{padding-top:44px!important}.v-application .pt-sm-12{padding-top:48px!important}.v-application .pr-sm-0{padding-right:0!important}.v-application .pr-sm-1{padding-right:4px!important}.v-application .pr-sm-2{padding-right:8px!important}.v-application .pr-sm-3{padding-right:12px!important}.v-application .pr-sm-4{padding-right:16px!important}.v-application .pr-sm-5{padding-right:20px!important}.v-application .pr-sm-6{padding-right:24px!important}.v-application .pr-sm-7{padding-right:28px!important}.v-application .pr-sm-8{padding-right:32px!important}.v-application .pr-sm-9{padding-right:36px!important}.v-application .pr-sm-10{padding-right:40px!important}.v-application .pr-sm-11{padding-right:44px!important}.v-application .pr-sm-12{padding-right:48px!important}.v-application .pb-sm-0{padding-bottom:0!important}.v-application .pb-sm-1{padding-bottom:4px!important}.v-application .pb-sm-2{padding-bottom:8px!important}.v-application .pb-sm-3{padding-bottom:12px!important}.v-application .pb-sm-4{padding-bottom:16px!important}.v-application .pb-sm-5{padding-bottom:20px!important}.v-application .pb-sm-6{padding-bottom:24px!important}.v-application .pb-sm-7{padding-bottom:28px!important}.v-application .pb-sm-8{padding-bottom:32px!important}.v-application .pb-sm-9{padding-bottom:36px!important}.v-application .pb-sm-10{padding-bottom:40px!important}.v-application .pb-sm-11{padding-bottom:44px!important}.v-application .pb-sm-12{padding-bottom:48px!important}.v-application .pl-sm-0{padding-left:0!important}.v-application .pl-sm-1{padding-left:4px!important}.v-application .pl-sm-2{padding-left:8px!important}.v-application .pl-sm-3{padding-left:12px!important}.v-application .pl-sm-4{padding-left:16px!important}.v-application .pl-sm-5{padding-left:20px!important}.v-application .pl-sm-6{padding-left:24px!important}.v-application .pl-sm-7{padding-left:28px!important}.v-application .pl-sm-8{padding-left:32px!important}.v-application .pl-sm-9{padding-left:36px!important}.v-application .pl-sm-10{padding-left:40px!important}.v-application .pl-sm-11{padding-left:44px!important}.v-application .pl-sm-12{padding-left:48px!important}.v-application--is-ltr .ps-sm-0{padding-left:0!important}.v-application--is-rtl .ps-sm-0{padding-right:0!important}.v-application--is-ltr .ps-sm-1{padding-left:4px!important}.v-application--is-rtl .ps-sm-1{padding-right:4px!important}.v-application--is-ltr .ps-sm-2{padding-left:8px!important}.v-application--is-rtl .ps-sm-2{padding-right:8px!important}.v-application--is-ltr .ps-sm-3{padding-left:12px!important}.v-application--is-rtl .ps-sm-3{padding-right:12px!important}.v-application--is-ltr .ps-sm-4{padding-left:16px!important}.v-application--is-rtl .ps-sm-4{padding-right:16px!important}.v-application--is-ltr .ps-sm-5{padding-left:20px!important}.v-application--is-rtl .ps-sm-5{padding-right:20px!important}.v-application--is-ltr .ps-sm-6{padding-left:24px!important}.v-application--is-rtl .ps-sm-6{padding-right:24px!important}.v-application--is-ltr .ps-sm-7{padding-left:28px!important}.v-application--is-rtl .ps-sm-7{padding-right:28px!important}.v-application--is-ltr .ps-sm-8{padding-left:32px!important}.v-application--is-rtl .ps-sm-8{padding-right:32px!important}.v-application--is-ltr .ps-sm-9{padding-left:36px!important}.v-application--is-rtl .ps-sm-9{padding-right:36px!important}.v-application--is-ltr .ps-sm-10{padding-left:40px!important}.v-application--is-rtl .ps-sm-10{padding-right:40px!important}.v-application--is-ltr .ps-sm-11{padding-left:44px!important}.v-application--is-rtl .ps-sm-11{padding-right:44px!important}.v-application--is-ltr .ps-sm-12{padding-left:48px!important}.v-application--is-rtl .ps-sm-12{padding-right:48px!important}.v-application--is-ltr .pe-sm-0{padding-right:0!important}.v-application--is-rtl .pe-sm-0{padding-left:0!important}.v-application--is-ltr .pe-sm-1{padding-right:4px!important}.v-application--is-rtl .pe-sm-1{padding-left:4px!important}.v-application--is-ltr .pe-sm-2{padding-right:8px!important}.v-application--is-rtl .pe-sm-2{padding-left:8px!important}.v-application--is-ltr .pe-sm-3{padding-right:12px!important}.v-application--is-rtl .pe-sm-3{padding-left:12px!important}.v-application--is-ltr .pe-sm-4{padding-right:16px!important}.v-application--is-rtl .pe-sm-4{padding-left:16px!important}.v-application--is-ltr .pe-sm-5{padding-right:20px!important}.v-application--is-rtl .pe-sm-5{padding-left:20px!important}.v-application--is-ltr .pe-sm-6{padding-right:24px!important}.v-application--is-rtl .pe-sm-6{padding-left:24px!important}.v-application--is-ltr .pe-sm-7{padding-right:28px!important}.v-application--is-rtl .pe-sm-7{padding-left:28px!important}.v-application--is-ltr .pe-sm-8{padding-right:32px!important}.v-application--is-rtl .pe-sm-8{padding-left:32px!important}.v-application--is-ltr .pe-sm-9{padding-right:36px!important}.v-application--is-rtl .pe-sm-9{padding-left:36px!important}.v-application--is-ltr .pe-sm-10{padding-right:40px!important}.v-application--is-rtl .pe-sm-10{padding-left:40px!important}.v-application--is-ltr .pe-sm-11{padding-right:44px!important}.v-application--is-rtl .pe-sm-11{padding-left:44px!important}.v-application--is-ltr .pe-sm-12{padding-right:48px!important}.v-application--is-rtl .pe-sm-12{padding-left:48px!important}.v-application .text-sm-left{text-align:left!important}.v-application .text-sm-right{text-align:right!important}.v-application .text-sm-center{text-align:center!important}.v-application .text-sm-justify{text-align:justify!important}.v-application .text-sm-start{text-align:start!important}.v-application .text-sm-end{text-align:end!important}}@media(min-width:960px){.v-application .d-md-none{display:none!important}.v-application .d-md-inline{display:inline!important}.v-application .d-md-inline-block{display:inline-block!important}.v-application .d-md-block{display:block!important}.v-application .d-md-table{display:table!important}.v-application .d-md-table-row{display:table-row!important}.v-application .d-md-table-cell{display:table-cell!important}.v-application .d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-md-none{float:none!important}.v-application .float-md-left{float:left!important}.v-application .float-md-right{float:right!important}.v-application .flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.v-application .flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.v-application .flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.v-application .flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.v-application .flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.v-application .flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.v-application .flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.v-application .flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.v-application .flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.v-application .flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.v-application .flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.v-application .flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.v-application .justify-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.v-application .justify-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.v-application .justify-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.v-application .justify-md-space-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.v-application .justify-md-space-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.v-application .align-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.v-application .align-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.v-application .align-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.v-application .align-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.v-application .align-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.v-application .align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.v-application .align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.v-application .align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.v-application .align-content-md-space-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.v-application .align-content-md-space-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.v-application .align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.v-application .align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.v-application .align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.v-application .align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.v-application .align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.v-application .align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.v-application .align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.v-application .order-md-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.v-application .order-md-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.v-application .order-md-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.v-application .order-md-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.v-application .order-md-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.v-application .order-md-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.v-application .order-md-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.v-application .order-md-6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.v-application .order-md-7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.v-application .order-md-8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.v-application .order-md-9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.v-application .order-md-10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.v-application .order-md-11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.v-application .order-md-12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.v-application .order-md-last{-webkit-box-ordinal-group:14!important;-ms-flex-order:13!important;order:13!important}.v-application .ma-md-0{margin:0!important}.v-application .ma-md-1{margin:4px!important}.v-application .ma-md-2{margin:8px!important}.v-application .ma-md-3{margin:12px!important}.v-application .ma-md-4{margin:16px!important}.v-application .ma-md-5{margin:20px!important}.v-application .ma-md-6{margin:24px!important}.v-application .ma-md-7{margin:28px!important}.v-application .ma-md-8{margin:32px!important}.v-application .ma-md-9{margin:36px!important}.v-application .ma-md-10{margin:40px!important}.v-application .ma-md-11{margin:44px!important}.v-application .ma-md-12{margin:48px!important}.v-application .ma-md-auto{margin:auto!important}.v-application .mx-md-0{margin-right:0!important;margin-left:0!important}.v-application .mx-md-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-md-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-md-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-md-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-md-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-md-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-md-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-md-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-md-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-md-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-md-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-md-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-md-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-md-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-md-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-md-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-md-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-md-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-md-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-md-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-md-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-md-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-md-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-md-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-md-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-md-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-md-0{margin-top:0!important}.v-application .mt-md-1{margin-top:4px!important}.v-application .mt-md-2{margin-top:8px!important}.v-application .mt-md-3{margin-top:12px!important}.v-application .mt-md-4{margin-top:16px!important}.v-application .mt-md-5{margin-top:20px!important}.v-application .mt-md-6{margin-top:24px!important}.v-application .mt-md-7{margin-top:28px!important}.v-application .mt-md-8{margin-top:32px!important}.v-application .mt-md-9{margin-top:36px!important}.v-application .mt-md-10{margin-top:40px!important}.v-application .mt-md-11{margin-top:44px!important}.v-application .mt-md-12{margin-top:48px!important}.v-application .mt-md-auto{margin-top:auto!important}.v-application .mr-md-0{margin-right:0!important}.v-application .mr-md-1{margin-right:4px!important}.v-application .mr-md-2{margin-right:8px!important}.v-application .mr-md-3{margin-right:12px!important}.v-application .mr-md-4{margin-right:16px!important}.v-application .mr-md-5{margin-right:20px!important}.v-application .mr-md-6{margin-right:24px!important}.v-application .mr-md-7{margin-right:28px!important}.v-application .mr-md-8{margin-right:32px!important}.v-application .mr-md-9{margin-right:36px!important}.v-application .mr-md-10{margin-right:40px!important}.v-application .mr-md-11{margin-right:44px!important}.v-application .mr-md-12{margin-right:48px!important}.v-application .mr-md-auto{margin-right:auto!important}.v-application .mb-md-0{margin-bottom:0!important}.v-application .mb-md-1{margin-bottom:4px!important}.v-application .mb-md-2{margin-bottom:8px!important}.v-application .mb-md-3{margin-bottom:12px!important}.v-application .mb-md-4{margin-bottom:16px!important}.v-application .mb-md-5{margin-bottom:20px!important}.v-application .mb-md-6{margin-bottom:24px!important}.v-application .mb-md-7{margin-bottom:28px!important}.v-application .mb-md-8{margin-bottom:32px!important}.v-application .mb-md-9{margin-bottom:36px!important}.v-application .mb-md-10{margin-bottom:40px!important}.v-application .mb-md-11{margin-bottom:44px!important}.v-application .mb-md-12{margin-bottom:48px!important}.v-application .mb-md-auto{margin-bottom:auto!important}.v-application .ml-md-0{margin-left:0!important}.v-application .ml-md-1{margin-left:4px!important}.v-application .ml-md-2{margin-left:8px!important}.v-application .ml-md-3{margin-left:12px!important}.v-application .ml-md-4{margin-left:16px!important}.v-application .ml-md-5{margin-left:20px!important}.v-application .ml-md-6{margin-left:24px!important}.v-application .ml-md-7{margin-left:28px!important}.v-application .ml-md-8{margin-left:32px!important}.v-application .ml-md-9{margin-left:36px!important}.v-application .ml-md-10{margin-left:40px!important}.v-application .ml-md-11{margin-left:44px!important}.v-application .ml-md-12{margin-left:48px!important}.v-application .ml-md-auto{margin-left:auto!important}.v-application--is-ltr .ms-md-0{margin-left:0!important}.v-application--is-rtl .ms-md-0{margin-right:0!important}.v-application--is-ltr .ms-md-1{margin-left:4px!important}.v-application--is-rtl .ms-md-1{margin-right:4px!important}.v-application--is-ltr .ms-md-2{margin-left:8px!important}.v-application--is-rtl .ms-md-2{margin-right:8px!important}.v-application--is-ltr .ms-md-3{margin-left:12px!important}.v-application--is-rtl .ms-md-3{margin-right:12px!important}.v-application--is-ltr .ms-md-4{margin-left:16px!important}.v-application--is-rtl .ms-md-4{margin-right:16px!important}.v-application--is-ltr .ms-md-5{margin-left:20px!important}.v-application--is-rtl .ms-md-5{margin-right:20px!important}.v-application--is-ltr .ms-md-6{margin-left:24px!important}.v-application--is-rtl .ms-md-6{margin-right:24px!important}.v-application--is-ltr .ms-md-7{margin-left:28px!important}.v-application--is-rtl .ms-md-7{margin-right:28px!important}.v-application--is-ltr .ms-md-8{margin-left:32px!important}.v-application--is-rtl .ms-md-8{margin-right:32px!important}.v-application--is-ltr .ms-md-9{margin-left:36px!important}.v-application--is-rtl .ms-md-9{margin-right:36px!important}.v-application--is-ltr .ms-md-10{margin-left:40px!important}.v-application--is-rtl .ms-md-10{margin-right:40px!important}.v-application--is-ltr .ms-md-11{margin-left:44px!important}.v-application--is-rtl .ms-md-11{margin-right:44px!important}.v-application--is-ltr .ms-md-12{margin-left:48px!important}.v-application--is-rtl .ms-md-12{margin-right:48px!important}.v-application--is-ltr .ms-md-auto{margin-left:auto!important}.v-application--is-rtl .ms-md-auto{margin-right:auto!important}.v-application--is-ltr .me-md-0{margin-right:0!important}.v-application--is-rtl .me-md-0{margin-left:0!important}.v-application--is-ltr .me-md-1{margin-right:4px!important}.v-application--is-rtl .me-md-1{margin-left:4px!important}.v-application--is-ltr .me-md-2{margin-right:8px!important}.v-application--is-rtl .me-md-2{margin-left:8px!important}.v-application--is-ltr .me-md-3{margin-right:12px!important}.v-application--is-rtl .me-md-3{margin-left:12px!important}.v-application--is-ltr .me-md-4{margin-right:16px!important}.v-application--is-rtl .me-md-4{margin-left:16px!important}.v-application--is-ltr .me-md-5{margin-right:20px!important}.v-application--is-rtl .me-md-5{margin-left:20px!important}.v-application--is-ltr .me-md-6{margin-right:24px!important}.v-application--is-rtl .me-md-6{margin-left:24px!important}.v-application--is-ltr .me-md-7{margin-right:28px!important}.v-application--is-rtl .me-md-7{margin-left:28px!important}.v-application--is-ltr .me-md-8{margin-right:32px!important}.v-application--is-rtl .me-md-8{margin-left:32px!important}.v-application--is-ltr .me-md-9{margin-right:36px!important}.v-application--is-rtl .me-md-9{margin-left:36px!important}.v-application--is-ltr .me-md-10{margin-right:40px!important}.v-application--is-rtl .me-md-10{margin-left:40px!important}.v-application--is-ltr .me-md-11{margin-right:44px!important}.v-application--is-rtl .me-md-11{margin-left:44px!important}.v-application--is-ltr .me-md-12{margin-right:48px!important}.v-application--is-rtl .me-md-12{margin-left:48px!important}.v-application--is-ltr .me-md-auto{margin-right:auto!important}.v-application--is-rtl .me-md-auto{margin-left:auto!important}.v-application .ma-md-n1{margin:-4px!important}.v-application .ma-md-n2{margin:-8px!important}.v-application .ma-md-n3{margin:-12px!important}.v-application .ma-md-n4{margin:-16px!important}.v-application .ma-md-n5{margin:-20px!important}.v-application .ma-md-n6{margin:-24px!important}.v-application .ma-md-n7{margin:-28px!important}.v-application .ma-md-n8{margin:-32px!important}.v-application .ma-md-n9{margin:-36px!important}.v-application .ma-md-n10{margin:-40px!important}.v-application .ma-md-n11{margin:-44px!important}.v-application .ma-md-n12{margin:-48px!important}.v-application .mx-md-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-md-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-md-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-md-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-md-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-md-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-md-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-md-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-md-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-md-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-md-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-md-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .my-md-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-md-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-md-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-md-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-md-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-md-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-md-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-md-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-md-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-md-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-md-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-md-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .mt-md-n1{margin-top:-4px!important}.v-application .mt-md-n2{margin-top:-8px!important}.v-application .mt-md-n3{margin-top:-12px!important}.v-application .mt-md-n4{margin-top:-16px!important}.v-application .mt-md-n5{margin-top:-20px!important}.v-application .mt-md-n6{margin-top:-24px!important}.v-application .mt-md-n7{margin-top:-28px!important}.v-application .mt-md-n8{margin-top:-32px!important}.v-application .mt-md-n9{margin-top:-36px!important}.v-application .mt-md-n10{margin-top:-40px!important}.v-application .mt-md-n11{margin-top:-44px!important}.v-application .mt-md-n12{margin-top:-48px!important}.v-application .mr-md-n1{margin-right:-4px!important}.v-application .mr-md-n2{margin-right:-8px!important}.v-application .mr-md-n3{margin-right:-12px!important}.v-application .mr-md-n4{margin-right:-16px!important}.v-application .mr-md-n5{margin-right:-20px!important}.v-application .mr-md-n6{margin-right:-24px!important}.v-application .mr-md-n7{margin-right:-28px!important}.v-application .mr-md-n8{margin-right:-32px!important}.v-application .mr-md-n9{margin-right:-36px!important}.v-application .mr-md-n10{margin-right:-40px!important}.v-application .mr-md-n11{margin-right:-44px!important}.v-application .mr-md-n12{margin-right:-48px!important}.v-application .mb-md-n1{margin-bottom:-4px!important}.v-application .mb-md-n2{margin-bottom:-8px!important}.v-application .mb-md-n3{margin-bottom:-12px!important}.v-application .mb-md-n4{margin-bottom:-16px!important}.v-application .mb-md-n5{margin-bottom:-20px!important}.v-application .mb-md-n6{margin-bottom:-24px!important}.v-application .mb-md-n7{margin-bottom:-28px!important}.v-application .mb-md-n8{margin-bottom:-32px!important}.v-application .mb-md-n9{margin-bottom:-36px!important}.v-application .mb-md-n10{margin-bottom:-40px!important}.v-application .mb-md-n11{margin-bottom:-44px!important}.v-application .mb-md-n12{margin-bottom:-48px!important}.v-application .ml-md-n1{margin-left:-4px!important}.v-application .ml-md-n2{margin-left:-8px!important}.v-application .ml-md-n3{margin-left:-12px!important}.v-application .ml-md-n4{margin-left:-16px!important}.v-application .ml-md-n5{margin-left:-20px!important}.v-application .ml-md-n6{margin-left:-24px!important}.v-application .ml-md-n7{margin-left:-28px!important}.v-application .ml-md-n8{margin-left:-32px!important}.v-application .ml-md-n9{margin-left:-36px!important}.v-application .ml-md-n10{margin-left:-40px!important}.v-application .ml-md-n11{margin-left:-44px!important}.v-application .ml-md-n12{margin-left:-48px!important}.v-application--is-ltr .ms-md-n1{margin-left:-4px!important}.v-application--is-rtl .ms-md-n1{margin-right:-4px!important}.v-application--is-ltr .ms-md-n2{margin-left:-8px!important}.v-application--is-rtl .ms-md-n2{margin-right:-8px!important}.v-application--is-ltr .ms-md-n3{margin-left:-12px!important}.v-application--is-rtl .ms-md-n3{margin-right:-12px!important}.v-application--is-ltr .ms-md-n4{margin-left:-16px!important}.v-application--is-rtl .ms-md-n4{margin-right:-16px!important}.v-application--is-ltr .ms-md-n5{margin-left:-20px!important}.v-application--is-rtl .ms-md-n5{margin-right:-20px!important}.v-application--is-ltr .ms-md-n6{margin-left:-24px!important}.v-application--is-rtl .ms-md-n6{margin-right:-24px!important}.v-application--is-ltr .ms-md-n7{margin-left:-28px!important}.v-application--is-rtl .ms-md-n7{margin-right:-28px!important}.v-application--is-ltr .ms-md-n8{margin-left:-32px!important}.v-application--is-rtl .ms-md-n8{margin-right:-32px!important}.v-application--is-ltr .ms-md-n9{margin-left:-36px!important}.v-application--is-rtl .ms-md-n9{margin-right:-36px!important}.v-application--is-ltr .ms-md-n10{margin-left:-40px!important}.v-application--is-rtl .ms-md-n10{margin-right:-40px!important}.v-application--is-ltr .ms-md-n11{margin-left:-44px!important}.v-application--is-rtl .ms-md-n11{margin-right:-44px!important}.v-application--is-ltr .ms-md-n12{margin-left:-48px!important}.v-application--is-rtl .ms-md-n12{margin-right:-48px!important}.v-application--is-ltr .me-md-n1{margin-right:-4px!important}.v-application--is-rtl .me-md-n1{margin-left:-4px!important}.v-application--is-ltr .me-md-n2{margin-right:-8px!important}.v-application--is-rtl .me-md-n2{margin-left:-8px!important}.v-application--is-ltr .me-md-n3{margin-right:-12px!important}.v-application--is-rtl .me-md-n3{margin-left:-12px!important}.v-application--is-ltr .me-md-n4{margin-right:-16px!important}.v-application--is-rtl .me-md-n4{margin-left:-16px!important}.v-application--is-ltr .me-md-n5{margin-right:-20px!important}.v-application--is-rtl .me-md-n5{margin-left:-20px!important}.v-application--is-ltr .me-md-n6{margin-right:-24px!important}.v-application--is-rtl .me-md-n6{margin-left:-24px!important}.v-application--is-ltr .me-md-n7{margin-right:-28px!important}.v-application--is-rtl .me-md-n7{margin-left:-28px!important}.v-application--is-ltr .me-md-n8{margin-right:-32px!important}.v-application--is-rtl .me-md-n8{margin-left:-32px!important}.v-application--is-ltr .me-md-n9{margin-right:-36px!important}.v-application--is-rtl .me-md-n9{margin-left:-36px!important}.v-application--is-ltr .me-md-n10{margin-right:-40px!important}.v-application--is-rtl .me-md-n10{margin-left:-40px!important}.v-application--is-ltr .me-md-n11{margin-right:-44px!important}.v-application--is-rtl .me-md-n11{margin-left:-44px!important}.v-application--is-ltr .me-md-n12{margin-right:-48px!important}.v-application--is-rtl .me-md-n12{margin-left:-48px!important}.v-application .pa-md-0{padding:0!important}.v-application .pa-md-1{padding:4px!important}.v-application .pa-md-2{padding:8px!important}.v-application .pa-md-3{padding:12px!important}.v-application .pa-md-4{padding:16px!important}.v-application .pa-md-5{padding:20px!important}.v-application .pa-md-6{padding:24px!important}.v-application .pa-md-7{padding:28px!important}.v-application .pa-md-8{padding:32px!important}.v-application .pa-md-9{padding:36px!important}.v-application .pa-md-10{padding:40px!important}.v-application .pa-md-11{padding:44px!important}.v-application .pa-md-12{padding:48px!important}.v-application .px-md-0{padding-right:0!important;padding-left:0!important}.v-application .px-md-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-md-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-md-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-md-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-md-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-md-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-md-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-md-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-md-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-md-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-md-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-md-12{padding-right:48px!important;padding-left:48px!important}.v-application .py-md-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-md-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-md-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-md-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-md-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-md-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-md-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-md-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-md-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-md-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-md-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-md-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-md-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .pt-md-0{padding-top:0!important}.v-application .pt-md-1{padding-top:4px!important}.v-application .pt-md-2{padding-top:8px!important}.v-application .pt-md-3{padding-top:12px!important}.v-application .pt-md-4{padding-top:16px!important}.v-application .pt-md-5{padding-top:20px!important}.v-application .pt-md-6{padding-top:24px!important}.v-application .pt-md-7{padding-top:28px!important}.v-application .pt-md-8{padding-top:32px!important}.v-application .pt-md-9{padding-top:36px!important}.v-application .pt-md-10{padding-top:40px!important}.v-application .pt-md-11{padding-top:44px!important}.v-application .pt-md-12{padding-top:48px!important}.v-application .pr-md-0{padding-right:0!important}.v-application .pr-md-1{padding-right:4px!important}.v-application .pr-md-2{padding-right:8px!important}.v-application .pr-md-3{padding-right:12px!important}.v-application .pr-md-4{padding-right:16px!important}.v-application .pr-md-5{padding-right:20px!important}.v-application .pr-md-6{padding-right:24px!important}.v-application .pr-md-7{padding-right:28px!important}.v-application .pr-md-8{padding-right:32px!important}.v-application .pr-md-9{padding-right:36px!important}.v-application .pr-md-10{padding-right:40px!important}.v-application .pr-md-11{padding-right:44px!important}.v-application .pr-md-12{padding-right:48px!important}.v-application .pb-md-0{padding-bottom:0!important}.v-application .pb-md-1{padding-bottom:4px!important}.v-application .pb-md-2{padding-bottom:8px!important}.v-application .pb-md-3{padding-bottom:12px!important}.v-application .pb-md-4{padding-bottom:16px!important}.v-application .pb-md-5{padding-bottom:20px!important}.v-application .pb-md-6{padding-bottom:24px!important}.v-application .pb-md-7{padding-bottom:28px!important}.v-application .pb-md-8{padding-bottom:32px!important}.v-application .pb-md-9{padding-bottom:36px!important}.v-application .pb-md-10{padding-bottom:40px!important}.v-application .pb-md-11{padding-bottom:44px!important}.v-application .pb-md-12{padding-bottom:48px!important}.v-application .pl-md-0{padding-left:0!important}.v-application .pl-md-1{padding-left:4px!important}.v-application .pl-md-2{padding-left:8px!important}.v-application .pl-md-3{padding-left:12px!important}.v-application .pl-md-4{padding-left:16px!important}.v-application .pl-md-5{padding-left:20px!important}.v-application .pl-md-6{padding-left:24px!important}.v-application .pl-md-7{padding-left:28px!important}.v-application .pl-md-8{padding-left:32px!important}.v-application .pl-md-9{padding-left:36px!important}.v-application .pl-md-10{padding-left:40px!important}.v-application .pl-md-11{padding-left:44px!important}.v-application .pl-md-12{padding-left:48px!important}.v-application--is-ltr .ps-md-0{padding-left:0!important}.v-application--is-rtl .ps-md-0{padding-right:0!important}.v-application--is-ltr .ps-md-1{padding-left:4px!important}.v-application--is-rtl .ps-md-1{padding-right:4px!important}.v-application--is-ltr .ps-md-2{padding-left:8px!important}.v-application--is-rtl .ps-md-2{padding-right:8px!important}.v-application--is-ltr .ps-md-3{padding-left:12px!important}.v-application--is-rtl .ps-md-3{padding-right:12px!important}.v-application--is-ltr .ps-md-4{padding-left:16px!important}.v-application--is-rtl .ps-md-4{padding-right:16px!important}.v-application--is-ltr .ps-md-5{padding-left:20px!important}.v-application--is-rtl .ps-md-5{padding-right:20px!important}.v-application--is-ltr .ps-md-6{padding-left:24px!important}.v-application--is-rtl .ps-md-6{padding-right:24px!important}.v-application--is-ltr .ps-md-7{padding-left:28px!important}.v-application--is-rtl .ps-md-7{padding-right:28px!important}.v-application--is-ltr .ps-md-8{padding-left:32px!important}.v-application--is-rtl .ps-md-8{padding-right:32px!important}.v-application--is-ltr .ps-md-9{padding-left:36px!important}.v-application--is-rtl .ps-md-9{padding-right:36px!important}.v-application--is-ltr .ps-md-10{padding-left:40px!important}.v-application--is-rtl .ps-md-10{padding-right:40px!important}.v-application--is-ltr .ps-md-11{padding-left:44px!important}.v-application--is-rtl .ps-md-11{padding-right:44px!important}.v-application--is-ltr .ps-md-12{padding-left:48px!important}.v-application--is-rtl .ps-md-12{padding-right:48px!important}.v-application--is-ltr .pe-md-0{padding-right:0!important}.v-application--is-rtl .pe-md-0{padding-left:0!important}.v-application--is-ltr .pe-md-1{padding-right:4px!important}.v-application--is-rtl .pe-md-1{padding-left:4px!important}.v-application--is-ltr .pe-md-2{padding-right:8px!important}.v-application--is-rtl .pe-md-2{padding-left:8px!important}.v-application--is-ltr .pe-md-3{padding-right:12px!important}.v-application--is-rtl .pe-md-3{padding-left:12px!important}.v-application--is-ltr .pe-md-4{padding-right:16px!important}.v-application--is-rtl .pe-md-4{padding-left:16px!important}.v-application--is-ltr .pe-md-5{padding-right:20px!important}.v-application--is-rtl .pe-md-5{padding-left:20px!important}.v-application--is-ltr .pe-md-6{padding-right:24px!important}.v-application--is-rtl .pe-md-6{padding-left:24px!important}.v-application--is-ltr .pe-md-7{padding-right:28px!important}.v-application--is-rtl .pe-md-7{padding-left:28px!important}.v-application--is-ltr .pe-md-8{padding-right:32px!important}.v-application--is-rtl .pe-md-8{padding-left:32px!important}.v-application--is-ltr .pe-md-9{padding-right:36px!important}.v-application--is-rtl .pe-md-9{padding-left:36px!important}.v-application--is-ltr .pe-md-10{padding-right:40px!important}.v-application--is-rtl .pe-md-10{padding-left:40px!important}.v-application--is-ltr .pe-md-11{padding-right:44px!important}.v-application--is-rtl .pe-md-11{padding-left:44px!important}.v-application--is-ltr .pe-md-12{padding-right:48px!important}.v-application--is-rtl .pe-md-12{padding-left:48px!important}.v-application .text-md-left{text-align:left!important}.v-application .text-md-right{text-align:right!important}.v-application .text-md-center{text-align:center!important}.v-application .text-md-justify{text-align:justify!important}.v-application .text-md-start{text-align:start!important}.v-application .text-md-end{text-align:end!important}}@media(min-width:1264px){.v-application .d-lg-none{display:none!important}.v-application .d-lg-inline{display:inline!important}.v-application .d-lg-inline-block{display:inline-block!important}.v-application .d-lg-block{display:block!important}.v-application .d-lg-table{display:table!important}.v-application .d-lg-table-row{display:table-row!important}.v-application .d-lg-table-cell{display:table-cell!important}.v-application .d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-lg-none{float:none!important}.v-application .float-lg-left{float:left!important}.v-application .float-lg-right{float:right!important}.v-application .flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.v-application .flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.v-application .flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.v-application .flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.v-application .flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.v-application .flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.v-application .flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.v-application .flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.v-application .flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.v-application .flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.v-application .flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.v-application .flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.v-application .justify-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.v-application .justify-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.v-application .justify-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.v-application .justify-lg-space-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.v-application .justify-lg-space-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.v-application .align-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.v-application .align-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.v-application .align-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.v-application .align-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.v-application .align-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.v-application .align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.v-application .align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.v-application .align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.v-application .align-content-lg-space-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.v-application .align-content-lg-space-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.v-application .align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.v-application .align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.v-application .align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.v-application .align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.v-application .align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.v-application .align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.v-application .align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.v-application .order-lg-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.v-application .order-lg-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.v-application .order-lg-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.v-application .order-lg-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.v-application .order-lg-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.v-application .order-lg-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.v-application .order-lg-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.v-application .order-lg-6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.v-application .order-lg-7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.v-application .order-lg-8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.v-application .order-lg-9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.v-application .order-lg-10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.v-application .order-lg-11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.v-application .order-lg-12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.v-application .order-lg-last{-webkit-box-ordinal-group:14!important;-ms-flex-order:13!important;order:13!important}.v-application .ma-lg-0{margin:0!important}.v-application .ma-lg-1{margin:4px!important}.v-application .ma-lg-2{margin:8px!important}.v-application .ma-lg-3{margin:12px!important}.v-application .ma-lg-4{margin:16px!important}.v-application .ma-lg-5{margin:20px!important}.v-application .ma-lg-6{margin:24px!important}.v-application .ma-lg-7{margin:28px!important}.v-application .ma-lg-8{margin:32px!important}.v-application .ma-lg-9{margin:36px!important}.v-application .ma-lg-10{margin:40px!important}.v-application .ma-lg-11{margin:44px!important}.v-application .ma-lg-12{margin:48px!important}.v-application .ma-lg-auto{margin:auto!important}.v-application .mx-lg-0{margin-right:0!important;margin-left:0!important}.v-application .mx-lg-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-lg-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-lg-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-lg-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-lg-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-lg-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-lg-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-lg-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-lg-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-lg-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-lg-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-lg-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-lg-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-lg-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-lg-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-lg-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-lg-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-lg-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-lg-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-lg-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-lg-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-lg-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-lg-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-lg-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-lg-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-lg-0{margin-top:0!important}.v-application .mt-lg-1{margin-top:4px!important}.v-application .mt-lg-2{margin-top:8px!important}.v-application .mt-lg-3{margin-top:12px!important}.v-application .mt-lg-4{margin-top:16px!important}.v-application .mt-lg-5{margin-top:20px!important}.v-application .mt-lg-6{margin-top:24px!important}.v-application .mt-lg-7{margin-top:28px!important}.v-application .mt-lg-8{margin-top:32px!important}.v-application .mt-lg-9{margin-top:36px!important}.v-application .mt-lg-10{margin-top:40px!important}.v-application .mt-lg-11{margin-top:44px!important}.v-application .mt-lg-12{margin-top:48px!important}.v-application .mt-lg-auto{margin-top:auto!important}.v-application .mr-lg-0{margin-right:0!important}.v-application .mr-lg-1{margin-right:4px!important}.v-application .mr-lg-2{margin-right:8px!important}.v-application .mr-lg-3{margin-right:12px!important}.v-application .mr-lg-4{margin-right:16px!important}.v-application .mr-lg-5{margin-right:20px!important}.v-application .mr-lg-6{margin-right:24px!important}.v-application .mr-lg-7{margin-right:28px!important}.v-application .mr-lg-8{margin-right:32px!important}.v-application .mr-lg-9{margin-right:36px!important}.v-application .mr-lg-10{margin-right:40px!important}.v-application .mr-lg-11{margin-right:44px!important}.v-application .mr-lg-12{margin-right:48px!important}.v-application .mr-lg-auto{margin-right:auto!important}.v-application .mb-lg-0{margin-bottom:0!important}.v-application .mb-lg-1{margin-bottom:4px!important}.v-application .mb-lg-2{margin-bottom:8px!important}.v-application .mb-lg-3{margin-bottom:12px!important}.v-application .mb-lg-4{margin-bottom:16px!important}.v-application .mb-lg-5{margin-bottom:20px!important}.v-application .mb-lg-6{margin-bottom:24px!important}.v-application .mb-lg-7{margin-bottom:28px!important}.v-application .mb-lg-8{margin-bottom:32px!important}.v-application .mb-lg-9{margin-bottom:36px!important}.v-application .mb-lg-10{margin-bottom:40px!important}.v-application .mb-lg-11{margin-bottom:44px!important}.v-application .mb-lg-12{margin-bottom:48px!important}.v-application .mb-lg-auto{margin-bottom:auto!important}.v-application .ml-lg-0{margin-left:0!important}.v-application .ml-lg-1{margin-left:4px!important}.v-application .ml-lg-2{margin-left:8px!important}.v-application .ml-lg-3{margin-left:12px!important}.v-application .ml-lg-4{margin-left:16px!important}.v-application .ml-lg-5{margin-left:20px!important}.v-application .ml-lg-6{margin-left:24px!important}.v-application .ml-lg-7{margin-left:28px!important}.v-application .ml-lg-8{margin-left:32px!important}.v-application .ml-lg-9{margin-left:36px!important}.v-application .ml-lg-10{margin-left:40px!important}.v-application .ml-lg-11{margin-left:44px!important}.v-application .ml-lg-12{margin-left:48px!important}.v-application .ml-lg-auto{margin-left:auto!important}.v-application--is-ltr .ms-lg-0{margin-left:0!important}.v-application--is-rtl .ms-lg-0{margin-right:0!important}.v-application--is-ltr .ms-lg-1{margin-left:4px!important}.v-application--is-rtl .ms-lg-1{margin-right:4px!important}.v-application--is-ltr .ms-lg-2{margin-left:8px!important}.v-application--is-rtl .ms-lg-2{margin-right:8px!important}.v-application--is-ltr .ms-lg-3{margin-left:12px!important}.v-application--is-rtl .ms-lg-3{margin-right:12px!important}.v-application--is-ltr .ms-lg-4{margin-left:16px!important}.v-application--is-rtl .ms-lg-4{margin-right:16px!important}.v-application--is-ltr .ms-lg-5{margin-left:20px!important}.v-application--is-rtl .ms-lg-5{margin-right:20px!important}.v-application--is-ltr .ms-lg-6{margin-left:24px!important}.v-application--is-rtl .ms-lg-6{margin-right:24px!important}.v-application--is-ltr .ms-lg-7{margin-left:28px!important}.v-application--is-rtl .ms-lg-7{margin-right:28px!important}.v-application--is-ltr .ms-lg-8{margin-left:32px!important}.v-application--is-rtl .ms-lg-8{margin-right:32px!important}.v-application--is-ltr .ms-lg-9{margin-left:36px!important}.v-application--is-rtl .ms-lg-9{margin-right:36px!important}.v-application--is-ltr .ms-lg-10{margin-left:40px!important}.v-application--is-rtl .ms-lg-10{margin-right:40px!important}.v-application--is-ltr .ms-lg-11{margin-left:44px!important}.v-application--is-rtl .ms-lg-11{margin-right:44px!important}.v-application--is-ltr .ms-lg-12{margin-left:48px!important}.v-application--is-rtl .ms-lg-12{margin-right:48px!important}.v-application--is-ltr .ms-lg-auto{margin-left:auto!important}.v-application--is-rtl .ms-lg-auto{margin-right:auto!important}.v-application--is-ltr .me-lg-0{margin-right:0!important}.v-application--is-rtl .me-lg-0{margin-left:0!important}.v-application--is-ltr .me-lg-1{margin-right:4px!important}.v-application--is-rtl .me-lg-1{margin-left:4px!important}.v-application--is-ltr .me-lg-2{margin-right:8px!important}.v-application--is-rtl .me-lg-2{margin-left:8px!important}.v-application--is-ltr .me-lg-3{margin-right:12px!important}.v-application--is-rtl .me-lg-3{margin-left:12px!important}.v-application--is-ltr .me-lg-4{margin-right:16px!important}.v-application--is-rtl .me-lg-4{margin-left:16px!important}.v-application--is-ltr .me-lg-5{margin-right:20px!important}.v-application--is-rtl .me-lg-5{margin-left:20px!important}.v-application--is-ltr .me-lg-6{margin-right:24px!important}.v-application--is-rtl .me-lg-6{margin-left:24px!important}.v-application--is-ltr .me-lg-7{margin-right:28px!important}.v-application--is-rtl .me-lg-7{margin-left:28px!important}.v-application--is-ltr .me-lg-8{margin-right:32px!important}.v-application--is-rtl .me-lg-8{margin-left:32px!important}.v-application--is-ltr .me-lg-9{margin-right:36px!important}.v-application--is-rtl .me-lg-9{margin-left:36px!important}.v-application--is-ltr .me-lg-10{margin-right:40px!important}.v-application--is-rtl .me-lg-10{margin-left:40px!important}.v-application--is-ltr .me-lg-11{margin-right:44px!important}.v-application--is-rtl .me-lg-11{margin-left:44px!important}.v-application--is-ltr .me-lg-12{margin-right:48px!important}.v-application--is-rtl .me-lg-12{margin-left:48px!important}.v-application--is-ltr .me-lg-auto{margin-right:auto!important}.v-application--is-rtl .me-lg-auto{margin-left:auto!important}.v-application .ma-lg-n1{margin:-4px!important}.v-application .ma-lg-n2{margin:-8px!important}.v-application .ma-lg-n3{margin:-12px!important}.v-application .ma-lg-n4{margin:-16px!important}.v-application .ma-lg-n5{margin:-20px!important}.v-application .ma-lg-n6{margin:-24px!important}.v-application .ma-lg-n7{margin:-28px!important}.v-application .ma-lg-n8{margin:-32px!important}.v-application .ma-lg-n9{margin:-36px!important}.v-application .ma-lg-n10{margin:-40px!important}.v-application .ma-lg-n11{margin:-44px!important}.v-application .ma-lg-n12{margin:-48px!important}.v-application .mx-lg-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-lg-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-lg-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-lg-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-lg-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-lg-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-lg-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-lg-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-lg-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-lg-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-lg-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-lg-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .my-lg-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-lg-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-lg-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-lg-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-lg-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-lg-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-lg-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-lg-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-lg-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-lg-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-lg-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-lg-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .mt-lg-n1{margin-top:-4px!important}.v-application .mt-lg-n2{margin-top:-8px!important}.v-application .mt-lg-n3{margin-top:-12px!important}.v-application .mt-lg-n4{margin-top:-16px!important}.v-application .mt-lg-n5{margin-top:-20px!important}.v-application .mt-lg-n6{margin-top:-24px!important}.v-application .mt-lg-n7{margin-top:-28px!important}.v-application .mt-lg-n8{margin-top:-32px!important}.v-application .mt-lg-n9{margin-top:-36px!important}.v-application .mt-lg-n10{margin-top:-40px!important}.v-application .mt-lg-n11{margin-top:-44px!important}.v-application .mt-lg-n12{margin-top:-48px!important}.v-application .mr-lg-n1{margin-right:-4px!important}.v-application .mr-lg-n2{margin-right:-8px!important}.v-application .mr-lg-n3{margin-right:-12px!important}.v-application .mr-lg-n4{margin-right:-16px!important}.v-application .mr-lg-n5{margin-right:-20px!important}.v-application .mr-lg-n6{margin-right:-24px!important}.v-application .mr-lg-n7{margin-right:-28px!important}.v-application .mr-lg-n8{margin-right:-32px!important}.v-application .mr-lg-n9{margin-right:-36px!important}.v-application .mr-lg-n10{margin-right:-40px!important}.v-application .mr-lg-n11{margin-right:-44px!important}.v-application .mr-lg-n12{margin-right:-48px!important}.v-application .mb-lg-n1{margin-bottom:-4px!important}.v-application .mb-lg-n2{margin-bottom:-8px!important}.v-application .mb-lg-n3{margin-bottom:-12px!important}.v-application .mb-lg-n4{margin-bottom:-16px!important}.v-application .mb-lg-n5{margin-bottom:-20px!important}.v-application .mb-lg-n6{margin-bottom:-24px!important}.v-application .mb-lg-n7{margin-bottom:-28px!important}.v-application .mb-lg-n8{margin-bottom:-32px!important}.v-application .mb-lg-n9{margin-bottom:-36px!important}.v-application .mb-lg-n10{margin-bottom:-40px!important}.v-application .mb-lg-n11{margin-bottom:-44px!important}.v-application .mb-lg-n12{margin-bottom:-48px!important}.v-application .ml-lg-n1{margin-left:-4px!important}.v-application .ml-lg-n2{margin-left:-8px!important}.v-application .ml-lg-n3{margin-left:-12px!important}.v-application .ml-lg-n4{margin-left:-16px!important}.v-application .ml-lg-n5{margin-left:-20px!important}.v-application .ml-lg-n6{margin-left:-24px!important}.v-application .ml-lg-n7{margin-left:-28px!important}.v-application .ml-lg-n8{margin-left:-32px!important}.v-application .ml-lg-n9{margin-left:-36px!important}.v-application .ml-lg-n10{margin-left:-40px!important}.v-application .ml-lg-n11{margin-left:-44px!important}.v-application .ml-lg-n12{margin-left:-48px!important}.v-application--is-ltr .ms-lg-n1{margin-left:-4px!important}.v-application--is-rtl .ms-lg-n1{margin-right:-4px!important}.v-application--is-ltr .ms-lg-n2{margin-left:-8px!important}.v-application--is-rtl .ms-lg-n2{margin-right:-8px!important}.v-application--is-ltr .ms-lg-n3{margin-left:-12px!important}.v-application--is-rtl .ms-lg-n3{margin-right:-12px!important}.v-application--is-ltr .ms-lg-n4{margin-left:-16px!important}.v-application--is-rtl .ms-lg-n4{margin-right:-16px!important}.v-application--is-ltr .ms-lg-n5{margin-left:-20px!important}.v-application--is-rtl .ms-lg-n5{margin-right:-20px!important}.v-application--is-ltr .ms-lg-n6{margin-left:-24px!important}.v-application--is-rtl .ms-lg-n6{margin-right:-24px!important}.v-application--is-ltr .ms-lg-n7{margin-left:-28px!important}.v-application--is-rtl .ms-lg-n7{margin-right:-28px!important}.v-application--is-ltr .ms-lg-n8{margin-left:-32px!important}.v-application--is-rtl .ms-lg-n8{margin-right:-32px!important}.v-application--is-ltr .ms-lg-n9{margin-left:-36px!important}.v-application--is-rtl .ms-lg-n9{margin-right:-36px!important}.v-application--is-ltr .ms-lg-n10{margin-left:-40px!important}.v-application--is-rtl .ms-lg-n10{margin-right:-40px!important}.v-application--is-ltr .ms-lg-n11{margin-left:-44px!important}.v-application--is-rtl .ms-lg-n11{margin-right:-44px!important}.v-application--is-ltr .ms-lg-n12{margin-left:-48px!important}.v-application--is-rtl .ms-lg-n12{margin-right:-48px!important}.v-application--is-ltr .me-lg-n1{margin-right:-4px!important}.v-application--is-rtl .me-lg-n1{margin-left:-4px!important}.v-application--is-ltr .me-lg-n2{margin-right:-8px!important}.v-application--is-rtl .me-lg-n2{margin-left:-8px!important}.v-application--is-ltr .me-lg-n3{margin-right:-12px!important}.v-application--is-rtl .me-lg-n3{margin-left:-12px!important}.v-application--is-ltr .me-lg-n4{margin-right:-16px!important}.v-application--is-rtl .me-lg-n4{margin-left:-16px!important}.v-application--is-ltr .me-lg-n5{margin-right:-20px!important}.v-application--is-rtl .me-lg-n5{margin-left:-20px!important}.v-application--is-ltr .me-lg-n6{margin-right:-24px!important}.v-application--is-rtl .me-lg-n6{margin-left:-24px!important}.v-application--is-ltr .me-lg-n7{margin-right:-28px!important}.v-application--is-rtl .me-lg-n7{margin-left:-28px!important}.v-application--is-ltr .me-lg-n8{margin-right:-32px!important}.v-application--is-rtl .me-lg-n8{margin-left:-32px!important}.v-application--is-ltr .me-lg-n9{margin-right:-36px!important}.v-application--is-rtl .me-lg-n9{margin-left:-36px!important}.v-application--is-ltr .me-lg-n10{margin-right:-40px!important}.v-application--is-rtl .me-lg-n10{margin-left:-40px!important}.v-application--is-ltr .me-lg-n11{margin-right:-44px!important}.v-application--is-rtl .me-lg-n11{margin-left:-44px!important}.v-application--is-ltr .me-lg-n12{margin-right:-48px!important}.v-application--is-rtl .me-lg-n12{margin-left:-48px!important}.v-application .pa-lg-0{padding:0!important}.v-application .pa-lg-1{padding:4px!important}.v-application .pa-lg-2{padding:8px!important}.v-application .pa-lg-3{padding:12px!important}.v-application .pa-lg-4{padding:16px!important}.v-application .pa-lg-5{padding:20px!important}.v-application .pa-lg-6{padding:24px!important}.v-application .pa-lg-7{padding:28px!important}.v-application .pa-lg-8{padding:32px!important}.v-application .pa-lg-9{padding:36px!important}.v-application .pa-lg-10{padding:40px!important}.v-application .pa-lg-11{padding:44px!important}.v-application .pa-lg-12{padding:48px!important}.v-application .px-lg-0{padding-right:0!important;padding-left:0!important}.v-application .px-lg-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-lg-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-lg-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-lg-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-lg-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-lg-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-lg-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-lg-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-lg-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-lg-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-lg-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-lg-12{padding-right:48px!important;padding-left:48px!important}.v-application .py-lg-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-lg-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-lg-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-lg-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-lg-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-lg-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-lg-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-lg-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-lg-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-lg-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-lg-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-lg-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-lg-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .pt-lg-0{padding-top:0!important}.v-application .pt-lg-1{padding-top:4px!important}.v-application .pt-lg-2{padding-top:8px!important}.v-application .pt-lg-3{padding-top:12px!important}.v-application .pt-lg-4{padding-top:16px!important}.v-application .pt-lg-5{padding-top:20px!important}.v-application .pt-lg-6{padding-top:24px!important}.v-application .pt-lg-7{padding-top:28px!important}.v-application .pt-lg-8{padding-top:32px!important}.v-application .pt-lg-9{padding-top:36px!important}.v-application .pt-lg-10{padding-top:40px!important}.v-application .pt-lg-11{padding-top:44px!important}.v-application .pt-lg-12{padding-top:48px!important}.v-application .pr-lg-0{padding-right:0!important}.v-application .pr-lg-1{padding-right:4px!important}.v-application .pr-lg-2{padding-right:8px!important}.v-application .pr-lg-3{padding-right:12px!important}.v-application .pr-lg-4{padding-right:16px!important}.v-application .pr-lg-5{padding-right:20px!important}.v-application .pr-lg-6{padding-right:24px!important}.v-application .pr-lg-7{padding-right:28px!important}.v-application .pr-lg-8{padding-right:32px!important}.v-application .pr-lg-9{padding-right:36px!important}.v-application .pr-lg-10{padding-right:40px!important}.v-application .pr-lg-11{padding-right:44px!important}.v-application .pr-lg-12{padding-right:48px!important}.v-application .pb-lg-0{padding-bottom:0!important}.v-application .pb-lg-1{padding-bottom:4px!important}.v-application .pb-lg-2{padding-bottom:8px!important}.v-application .pb-lg-3{padding-bottom:12px!important}.v-application .pb-lg-4{padding-bottom:16px!important}.v-application .pb-lg-5{padding-bottom:20px!important}.v-application .pb-lg-6{padding-bottom:24px!important}.v-application .pb-lg-7{padding-bottom:28px!important}.v-application .pb-lg-8{padding-bottom:32px!important}.v-application .pb-lg-9{padding-bottom:36px!important}.v-application .pb-lg-10{padding-bottom:40px!important}.v-application .pb-lg-11{padding-bottom:44px!important}.v-application .pb-lg-12{padding-bottom:48px!important}.v-application .pl-lg-0{padding-left:0!important}.v-application .pl-lg-1{padding-left:4px!important}.v-application .pl-lg-2{padding-left:8px!important}.v-application .pl-lg-3{padding-left:12px!important}.v-application .pl-lg-4{padding-left:16px!important}.v-application .pl-lg-5{padding-left:20px!important}.v-application .pl-lg-6{padding-left:24px!important}.v-application .pl-lg-7{padding-left:28px!important}.v-application .pl-lg-8{padding-left:32px!important}.v-application .pl-lg-9{padding-left:36px!important}.v-application .pl-lg-10{padding-left:40px!important}.v-application .pl-lg-11{padding-left:44px!important}.v-application .pl-lg-12{padding-left:48px!important}.v-application--is-ltr .ps-lg-0{padding-left:0!important}.v-application--is-rtl .ps-lg-0{padding-right:0!important}.v-application--is-ltr .ps-lg-1{padding-left:4px!important}.v-application--is-rtl .ps-lg-1{padding-right:4px!important}.v-application--is-ltr .ps-lg-2{padding-left:8px!important}.v-application--is-rtl .ps-lg-2{padding-right:8px!important}.v-application--is-ltr .ps-lg-3{padding-left:12px!important}.v-application--is-rtl .ps-lg-3{padding-right:12px!important}.v-application--is-ltr .ps-lg-4{padding-left:16px!important}.v-application--is-rtl .ps-lg-4{padding-right:16px!important}.v-application--is-ltr .ps-lg-5{padding-left:20px!important}.v-application--is-rtl .ps-lg-5{padding-right:20px!important}.v-application--is-ltr .ps-lg-6{padding-left:24px!important}.v-application--is-rtl .ps-lg-6{padding-right:24px!important}.v-application--is-ltr .ps-lg-7{padding-left:28px!important}.v-application--is-rtl .ps-lg-7{padding-right:28px!important}.v-application--is-ltr .ps-lg-8{padding-left:32px!important}.v-application--is-rtl .ps-lg-8{padding-right:32px!important}.v-application--is-ltr .ps-lg-9{padding-left:36px!important}.v-application--is-rtl .ps-lg-9{padding-right:36px!important}.v-application--is-ltr .ps-lg-10{padding-left:40px!important}.v-application--is-rtl .ps-lg-10{padding-right:40px!important}.v-application--is-ltr .ps-lg-11{padding-left:44px!important}.v-application--is-rtl .ps-lg-11{padding-right:44px!important}.v-application--is-ltr .ps-lg-12{padding-left:48px!important}.v-application--is-rtl .ps-lg-12{padding-right:48px!important}.v-application--is-ltr .pe-lg-0{padding-right:0!important}.v-application--is-rtl .pe-lg-0{padding-left:0!important}.v-application--is-ltr .pe-lg-1{padding-right:4px!important}.v-application--is-rtl .pe-lg-1{padding-left:4px!important}.v-application--is-ltr .pe-lg-2{padding-right:8px!important}.v-application--is-rtl .pe-lg-2{padding-left:8px!important}.v-application--is-ltr .pe-lg-3{padding-right:12px!important}.v-application--is-rtl .pe-lg-3{padding-left:12px!important}.v-application--is-ltr .pe-lg-4{padding-right:16px!important}.v-application--is-rtl .pe-lg-4{padding-left:16px!important}.v-application--is-ltr .pe-lg-5{padding-right:20px!important}.v-application--is-rtl .pe-lg-5{padding-left:20px!important}.v-application--is-ltr .pe-lg-6{padding-right:24px!important}.v-application--is-rtl .pe-lg-6{padding-left:24px!important}.v-application--is-ltr .pe-lg-7{padding-right:28px!important}.v-application--is-rtl .pe-lg-7{padding-left:28px!important}.v-application--is-ltr .pe-lg-8{padding-right:32px!important}.v-application--is-rtl .pe-lg-8{padding-left:32px!important}.v-application--is-ltr .pe-lg-9{padding-right:36px!important}.v-application--is-rtl .pe-lg-9{padding-left:36px!important}.v-application--is-ltr .pe-lg-10{padding-right:40px!important}.v-application--is-rtl .pe-lg-10{padding-left:40px!important}.v-application--is-ltr .pe-lg-11{padding-right:44px!important}.v-application--is-rtl .pe-lg-11{padding-left:44px!important}.v-application--is-ltr .pe-lg-12{padding-right:48px!important}.v-application--is-rtl .pe-lg-12{padding-left:48px!important}.v-application .text-lg-left{text-align:left!important}.v-application .text-lg-right{text-align:right!important}.v-application .text-lg-center{text-align:center!important}.v-application .text-lg-justify{text-align:justify!important}.v-application .text-lg-start{text-align:start!important}.v-application .text-lg-end{text-align:end!important}}@media(min-width:1904px){.v-application .d-xl-none{display:none!important}.v-application .d-xl-inline{display:inline!important}.v-application .d-xl-inline-block{display:inline-block!important}.v-application .d-xl-block{display:block!important}.v-application .d-xl-table{display:table!important}.v-application .d-xl-table-row{display:table-row!important}.v-application .d-xl-table-cell{display:table-cell!important}.v-application .d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-xl-none{float:none!important}.v-application .float-xl-left{float:left!important}.v-application .float-xl-right{float:right!important}.v-application .flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.v-application .flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.v-application .flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.v-application .flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.v-application .flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.v-application .flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.v-application .flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.v-application .flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.v-application .flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.v-application .flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.v-application .flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.v-application .flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.v-application .justify-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.v-application .justify-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.v-application .justify-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.v-application .justify-xl-space-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.v-application .justify-xl-space-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.v-application .align-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.v-application .align-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.v-application .align-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.v-application .align-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.v-application .align-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.v-application .align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.v-application .align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.v-application .align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.v-application .align-content-xl-space-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.v-application .align-content-xl-space-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.v-application .align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.v-application .align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.v-application .align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.v-application .align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.v-application .align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.v-application .align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.v-application .align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.v-application .order-xl-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.v-application .order-xl-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.v-application .order-xl-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.v-application .order-xl-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.v-application .order-xl-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.v-application .order-xl-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.v-application .order-xl-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.v-application .order-xl-6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.v-application .order-xl-7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.v-application .order-xl-8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.v-application .order-xl-9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.v-application .order-xl-10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.v-application .order-xl-11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.v-application .order-xl-12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.v-application .order-xl-last{-webkit-box-ordinal-group:14!important;-ms-flex-order:13!important;order:13!important}.v-application .ma-xl-0{margin:0!important}.v-application .ma-xl-1{margin:4px!important}.v-application .ma-xl-2{margin:8px!important}.v-application .ma-xl-3{margin:12px!important}.v-application .ma-xl-4{margin:16px!important}.v-application .ma-xl-5{margin:20px!important}.v-application .ma-xl-6{margin:24px!important}.v-application .ma-xl-7{margin:28px!important}.v-application .ma-xl-8{margin:32px!important}.v-application .ma-xl-9{margin:36px!important}.v-application .ma-xl-10{margin:40px!important}.v-application .ma-xl-11{margin:44px!important}.v-application .ma-xl-12{margin:48px!important}.v-application .ma-xl-auto{margin:auto!important}.v-application .mx-xl-0{margin-right:0!important;margin-left:0!important}.v-application .mx-xl-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-xl-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-xl-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-xl-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-xl-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-xl-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-xl-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-xl-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-xl-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-xl-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-xl-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-xl-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-xl-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-xl-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-xl-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-xl-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-xl-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-xl-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-xl-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-xl-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-xl-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-xl-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-xl-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-xl-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-xl-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-xl-0{margin-top:0!important}.v-application .mt-xl-1{margin-top:4px!important}.v-application .mt-xl-2{margin-top:8px!important}.v-application .mt-xl-3{margin-top:12px!important}.v-application .mt-xl-4{margin-top:16px!important}.v-application .mt-xl-5{margin-top:20px!important}.v-application .mt-xl-6{margin-top:24px!important}.v-application .mt-xl-7{margin-top:28px!important}.v-application .mt-xl-8{margin-top:32px!important}.v-application .mt-xl-9{margin-top:36px!important}.v-application .mt-xl-10{margin-top:40px!important}.v-application .mt-xl-11{margin-top:44px!important}.v-application .mt-xl-12{margin-top:48px!important}.v-application .mt-xl-auto{margin-top:auto!important}.v-application .mr-xl-0{margin-right:0!important}.v-application .mr-xl-1{margin-right:4px!important}.v-application .mr-xl-2{margin-right:8px!important}.v-application .mr-xl-3{margin-right:12px!important}.v-application .mr-xl-4{margin-right:16px!important}.v-application .mr-xl-5{margin-right:20px!important}.v-application .mr-xl-6{margin-right:24px!important}.v-application .mr-xl-7{margin-right:28px!important}.v-application .mr-xl-8{margin-right:32px!important}.v-application .mr-xl-9{margin-right:36px!important}.v-application .mr-xl-10{margin-right:40px!important}.v-application .mr-xl-11{margin-right:44px!important}.v-application .mr-xl-12{margin-right:48px!important}.v-application .mr-xl-auto{margin-right:auto!important}.v-application .mb-xl-0{margin-bottom:0!important}.v-application .mb-xl-1{margin-bottom:4px!important}.v-application .mb-xl-2{margin-bottom:8px!important}.v-application .mb-xl-3{margin-bottom:12px!important}.v-application .mb-xl-4{margin-bottom:16px!important}.v-application .mb-xl-5{margin-bottom:20px!important}.v-application .mb-xl-6{margin-bottom:24px!important}.v-application .mb-xl-7{margin-bottom:28px!important}.v-application .mb-xl-8{margin-bottom:32px!important}.v-application .mb-xl-9{margin-bottom:36px!important}.v-application .mb-xl-10{margin-bottom:40px!important}.v-application .mb-xl-11{margin-bottom:44px!important}.v-application .mb-xl-12{margin-bottom:48px!important}.v-application .mb-xl-auto{margin-bottom:auto!important}.v-application .ml-xl-0{margin-left:0!important}.v-application .ml-xl-1{margin-left:4px!important}.v-application .ml-xl-2{margin-left:8px!important}.v-application .ml-xl-3{margin-left:12px!important}.v-application .ml-xl-4{margin-left:16px!important}.v-application .ml-xl-5{margin-left:20px!important}.v-application .ml-xl-6{margin-left:24px!important}.v-application .ml-xl-7{margin-left:28px!important}.v-application .ml-xl-8{margin-left:32px!important}.v-application .ml-xl-9{margin-left:36px!important}.v-application .ml-xl-10{margin-left:40px!important}.v-application .ml-xl-11{margin-left:44px!important}.v-application .ml-xl-12{margin-left:48px!important}.v-application .ml-xl-auto{margin-left:auto!important}.v-application--is-ltr .ms-xl-0{margin-left:0!important}.v-application--is-rtl .ms-xl-0{margin-right:0!important}.v-application--is-ltr .ms-xl-1{margin-left:4px!important}.v-application--is-rtl .ms-xl-1{margin-right:4px!important}.v-application--is-ltr .ms-xl-2{margin-left:8px!important}.v-application--is-rtl .ms-xl-2{margin-right:8px!important}.v-application--is-ltr .ms-xl-3{margin-left:12px!important}.v-application--is-rtl .ms-xl-3{margin-right:12px!important}.v-application--is-ltr .ms-xl-4{margin-left:16px!important}.v-application--is-rtl .ms-xl-4{margin-right:16px!important}.v-application--is-ltr .ms-xl-5{margin-left:20px!important}.v-application--is-rtl .ms-xl-5{margin-right:20px!important}.v-application--is-ltr .ms-xl-6{margin-left:24px!important}.v-application--is-rtl .ms-xl-6{margin-right:24px!important}.v-application--is-ltr .ms-xl-7{margin-left:28px!important}.v-application--is-rtl .ms-xl-7{margin-right:28px!important}.v-application--is-ltr .ms-xl-8{margin-left:32px!important}.v-application--is-rtl .ms-xl-8{margin-right:32px!important}.v-application--is-ltr .ms-xl-9{margin-left:36px!important}.v-application--is-rtl .ms-xl-9{margin-right:36px!important}.v-application--is-ltr .ms-xl-10{margin-left:40px!important}.v-application--is-rtl .ms-xl-10{margin-right:40px!important}.v-application--is-ltr .ms-xl-11{margin-left:44px!important}.v-application--is-rtl .ms-xl-11{margin-right:44px!important}.v-application--is-ltr .ms-xl-12{margin-left:48px!important}.v-application--is-rtl .ms-xl-12{margin-right:48px!important}.v-application--is-ltr .ms-xl-auto{margin-left:auto!important}.v-application--is-rtl .ms-xl-auto{margin-right:auto!important}.v-application--is-ltr .me-xl-0{margin-right:0!important}.v-application--is-rtl .me-xl-0{margin-left:0!important}.v-application--is-ltr .me-xl-1{margin-right:4px!important}.v-application--is-rtl .me-xl-1{margin-left:4px!important}.v-application--is-ltr .me-xl-2{margin-right:8px!important}.v-application--is-rtl .me-xl-2{margin-left:8px!important}.v-application--is-ltr .me-xl-3{margin-right:12px!important}.v-application--is-rtl .me-xl-3{margin-left:12px!important}.v-application--is-ltr .me-xl-4{margin-right:16px!important}.v-application--is-rtl .me-xl-4{margin-left:16px!important}.v-application--is-ltr .me-xl-5{margin-right:20px!important}.v-application--is-rtl .me-xl-5{margin-left:20px!important}.v-application--is-ltr .me-xl-6{margin-right:24px!important}.v-application--is-rtl .me-xl-6{margin-left:24px!important}.v-application--is-ltr .me-xl-7{margin-right:28px!important}.v-application--is-rtl .me-xl-7{margin-left:28px!important}.v-application--is-ltr .me-xl-8{margin-right:32px!important}.v-application--is-rtl .me-xl-8{margin-left:32px!important}.v-application--is-ltr .me-xl-9{margin-right:36px!important}.v-application--is-rtl .me-xl-9{margin-left:36px!important}.v-application--is-ltr .me-xl-10{margin-right:40px!important}.v-application--is-rtl .me-xl-10{margin-left:40px!important}.v-application--is-ltr .me-xl-11{margin-right:44px!important}.v-application--is-rtl .me-xl-11{margin-left:44px!important}.v-application--is-ltr .me-xl-12{margin-right:48px!important}.v-application--is-rtl .me-xl-12{margin-left:48px!important}.v-application--is-ltr .me-xl-auto{margin-right:auto!important}.v-application--is-rtl .me-xl-auto{margin-left:auto!important}.v-application .ma-xl-n1{margin:-4px!important}.v-application .ma-xl-n2{margin:-8px!important}.v-application .ma-xl-n3{margin:-12px!important}.v-application .ma-xl-n4{margin:-16px!important}.v-application .ma-xl-n5{margin:-20px!important}.v-application .ma-xl-n6{margin:-24px!important}.v-application .ma-xl-n7{margin:-28px!important}.v-application .ma-xl-n8{margin:-32px!important}.v-application .ma-xl-n9{margin:-36px!important}.v-application .ma-xl-n10{margin:-40px!important}.v-application .ma-xl-n11{margin:-44px!important}.v-application .ma-xl-n12{margin:-48px!important}.v-application .mx-xl-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-xl-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-xl-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-xl-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-xl-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-xl-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-xl-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-xl-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-xl-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-xl-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-xl-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-xl-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .my-xl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-xl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-xl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-xl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-xl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-xl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-xl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-xl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-xl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-xl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-xl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-xl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .mt-xl-n1{margin-top:-4px!important}.v-application .mt-xl-n2{margin-top:-8px!important}.v-application .mt-xl-n3{margin-top:-12px!important}.v-application .mt-xl-n4{margin-top:-16px!important}.v-application .mt-xl-n5{margin-top:-20px!important}.v-application .mt-xl-n6{margin-top:-24px!important}.v-application .mt-xl-n7{margin-top:-28px!important}.v-application .mt-xl-n8{margin-top:-32px!important}.v-application .mt-xl-n9{margin-top:-36px!important}.v-application .mt-xl-n10{margin-top:-40px!important}.v-application .mt-xl-n11{margin-top:-44px!important}.v-application .mt-xl-n12{margin-top:-48px!important}.v-application .mr-xl-n1{margin-right:-4px!important}.v-application .mr-xl-n2{margin-right:-8px!important}.v-application .mr-xl-n3{margin-right:-12px!important}.v-application .mr-xl-n4{margin-right:-16px!important}.v-application .mr-xl-n5{margin-right:-20px!important}.v-application .mr-xl-n6{margin-right:-24px!important}.v-application .mr-xl-n7{margin-right:-28px!important}.v-application .mr-xl-n8{margin-right:-32px!important}.v-application .mr-xl-n9{margin-right:-36px!important}.v-application .mr-xl-n10{margin-right:-40px!important}.v-application .mr-xl-n11{margin-right:-44px!important}.v-application .mr-xl-n12{margin-right:-48px!important}.v-application .mb-xl-n1{margin-bottom:-4px!important}.v-application .mb-xl-n2{margin-bottom:-8px!important}.v-application .mb-xl-n3{margin-bottom:-12px!important}.v-application .mb-xl-n4{margin-bottom:-16px!important}.v-application .mb-xl-n5{margin-bottom:-20px!important}.v-application .mb-xl-n6{margin-bottom:-24px!important}.v-application .mb-xl-n7{margin-bottom:-28px!important}.v-application .mb-xl-n8{margin-bottom:-32px!important}.v-application .mb-xl-n9{margin-bottom:-36px!important}.v-application .mb-xl-n10{margin-bottom:-40px!important}.v-application .mb-xl-n11{margin-bottom:-44px!important}.v-application .mb-xl-n12{margin-bottom:-48px!important}.v-application .ml-xl-n1{margin-left:-4px!important}.v-application .ml-xl-n2{margin-left:-8px!important}.v-application .ml-xl-n3{margin-left:-12px!important}.v-application .ml-xl-n4{margin-left:-16px!important}.v-application .ml-xl-n5{margin-left:-20px!important}.v-application .ml-xl-n6{margin-left:-24px!important}.v-application .ml-xl-n7{margin-left:-28px!important}.v-application .ml-xl-n8{margin-left:-32px!important}.v-application .ml-xl-n9{margin-left:-36px!important}.v-application .ml-xl-n10{margin-left:-40px!important}.v-application .ml-xl-n11{margin-left:-44px!important}.v-application .ml-xl-n12{margin-left:-48px!important}.v-application--is-ltr .ms-xl-n1{margin-left:-4px!important}.v-application--is-rtl .ms-xl-n1{margin-right:-4px!important}.v-application--is-ltr .ms-xl-n2{margin-left:-8px!important}.v-application--is-rtl .ms-xl-n2{margin-right:-8px!important}.v-application--is-ltr .ms-xl-n3{margin-left:-12px!important}.v-application--is-rtl .ms-xl-n3{margin-right:-12px!important}.v-application--is-ltr .ms-xl-n4{margin-left:-16px!important}.v-application--is-rtl .ms-xl-n4{margin-right:-16px!important}.v-application--is-ltr .ms-xl-n5{margin-left:-20px!important}.v-application--is-rtl .ms-xl-n5{margin-right:-20px!important}.v-application--is-ltr .ms-xl-n6{margin-left:-24px!important}.v-application--is-rtl .ms-xl-n6{margin-right:-24px!important}.v-application--is-ltr .ms-xl-n7{margin-left:-28px!important}.v-application--is-rtl .ms-xl-n7{margin-right:-28px!important}.v-application--is-ltr .ms-xl-n8{margin-left:-32px!important}.v-application--is-rtl .ms-xl-n8{margin-right:-32px!important}.v-application--is-ltr .ms-xl-n9{margin-left:-36px!important}.v-application--is-rtl .ms-xl-n9{margin-right:-36px!important}.v-application--is-ltr .ms-xl-n10{margin-left:-40px!important}.v-application--is-rtl .ms-xl-n10{margin-right:-40px!important}.v-application--is-ltr .ms-xl-n11{margin-left:-44px!important}.v-application--is-rtl .ms-xl-n11{margin-right:-44px!important}.v-application--is-ltr .ms-xl-n12{margin-left:-48px!important}.v-application--is-rtl .ms-xl-n12{margin-right:-48px!important}.v-application--is-ltr .me-xl-n1{margin-right:-4px!important}.v-application--is-rtl .me-xl-n1{margin-left:-4px!important}.v-application--is-ltr .me-xl-n2{margin-right:-8px!important}.v-application--is-rtl .me-xl-n2{margin-left:-8px!important}.v-application--is-ltr .me-xl-n3{margin-right:-12px!important}.v-application--is-rtl .me-xl-n3{margin-left:-12px!important}.v-application--is-ltr .me-xl-n4{margin-right:-16px!important}.v-application--is-rtl .me-xl-n4{margin-left:-16px!important}.v-application--is-ltr .me-xl-n5{margin-right:-20px!important}.v-application--is-rtl .me-xl-n5{margin-left:-20px!important}.v-application--is-ltr .me-xl-n6{margin-right:-24px!important}.v-application--is-rtl .me-xl-n6{margin-left:-24px!important}.v-application--is-ltr .me-xl-n7{margin-right:-28px!important}.v-application--is-rtl .me-xl-n7{margin-left:-28px!important}.v-application--is-ltr .me-xl-n8{margin-right:-32px!important}.v-application--is-rtl .me-xl-n8{margin-left:-32px!important}.v-application--is-ltr .me-xl-n9{margin-right:-36px!important}.v-application--is-rtl .me-xl-n9{margin-left:-36px!important}.v-application--is-ltr .me-xl-n10{margin-right:-40px!important}.v-application--is-rtl .me-xl-n10{margin-left:-40px!important}.v-application--is-ltr .me-xl-n11{margin-right:-44px!important}.v-application--is-rtl .me-xl-n11{margin-left:-44px!important}.v-application--is-ltr .me-xl-n12{margin-right:-48px!important}.v-application--is-rtl .me-xl-n12{margin-left:-48px!important}.v-application .pa-xl-0{padding:0!important}.v-application .pa-xl-1{padding:4px!important}.v-application .pa-xl-2{padding:8px!important}.v-application .pa-xl-3{padding:12px!important}.v-application .pa-xl-4{padding:16px!important}.v-application .pa-xl-5{padding:20px!important}.v-application .pa-xl-6{padding:24px!important}.v-application .pa-xl-7{padding:28px!important}.v-application .pa-xl-8{padding:32px!important}.v-application .pa-xl-9{padding:36px!important}.v-application .pa-xl-10{padding:40px!important}.v-application .pa-xl-11{padding:44px!important}.v-application .pa-xl-12{padding:48px!important}.v-application .px-xl-0{padding-right:0!important;padding-left:0!important}.v-application .px-xl-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-xl-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-xl-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-xl-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-xl-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-xl-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-xl-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-xl-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-xl-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-xl-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-xl-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-xl-12{padding-right:48px!important;padding-left:48px!important}.v-application .py-xl-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-xl-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-xl-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-xl-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-xl-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-xl-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-xl-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-xl-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-xl-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-xl-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-xl-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-xl-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-xl-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .pt-xl-0{padding-top:0!important}.v-application .pt-xl-1{padding-top:4px!important}.v-application .pt-xl-2{padding-top:8px!important}.v-application .pt-xl-3{padding-top:12px!important}.v-application .pt-xl-4{padding-top:16px!important}.v-application .pt-xl-5{padding-top:20px!important}.v-application .pt-xl-6{padding-top:24px!important}.v-application .pt-xl-7{padding-top:28px!important}.v-application .pt-xl-8{padding-top:32px!important}.v-application .pt-xl-9{padding-top:36px!important}.v-application .pt-xl-10{padding-top:40px!important}.v-application .pt-xl-11{padding-top:44px!important}.v-application .pt-xl-12{padding-top:48px!important}.v-application .pr-xl-0{padding-right:0!important}.v-application .pr-xl-1{padding-right:4px!important}.v-application .pr-xl-2{padding-right:8px!important}.v-application .pr-xl-3{padding-right:12px!important}.v-application .pr-xl-4{padding-right:16px!important}.v-application .pr-xl-5{padding-right:20px!important}.v-application .pr-xl-6{padding-right:24px!important}.v-application .pr-xl-7{padding-right:28px!important}.v-application .pr-xl-8{padding-right:32px!important}.v-application .pr-xl-9{padding-right:36px!important}.v-application .pr-xl-10{padding-right:40px!important}.v-application .pr-xl-11{padding-right:44px!important}.v-application .pr-xl-12{padding-right:48px!important}.v-application .pb-xl-0{padding-bottom:0!important}.v-application .pb-xl-1{padding-bottom:4px!important}.v-application .pb-xl-2{padding-bottom:8px!important}.v-application .pb-xl-3{padding-bottom:12px!important}.v-application .pb-xl-4{padding-bottom:16px!important}.v-application .pb-xl-5{padding-bottom:20px!important}.v-application .pb-xl-6{padding-bottom:24px!important}.v-application .pb-xl-7{padding-bottom:28px!important}.v-application .pb-xl-8{padding-bottom:32px!important}.v-application .pb-xl-9{padding-bottom:36px!important}.v-application .pb-xl-10{padding-bottom:40px!important}.v-application .pb-xl-11{padding-bottom:44px!important}.v-application .pb-xl-12{padding-bottom:48px!important}.v-application .pl-xl-0{padding-left:0!important}.v-application .pl-xl-1{padding-left:4px!important}.v-application .pl-xl-2{padding-left:8px!important}.v-application .pl-xl-3{padding-left:12px!important}.v-application .pl-xl-4{padding-left:16px!important}.v-application .pl-xl-5{padding-left:20px!important}.v-application .pl-xl-6{padding-left:24px!important}.v-application .pl-xl-7{padding-left:28px!important}.v-application .pl-xl-8{padding-left:32px!important}.v-application .pl-xl-9{padding-left:36px!important}.v-application .pl-xl-10{padding-left:40px!important}.v-application .pl-xl-11{padding-left:44px!important}.v-application .pl-xl-12{padding-left:48px!important}.v-application--is-ltr .ps-xl-0{padding-left:0!important}.v-application--is-rtl .ps-xl-0{padding-right:0!important}.v-application--is-ltr .ps-xl-1{padding-left:4px!important}.v-application--is-rtl .ps-xl-1{padding-right:4px!important}.v-application--is-ltr .ps-xl-2{padding-left:8px!important}.v-application--is-rtl .ps-xl-2{padding-right:8px!important}.v-application--is-ltr .ps-xl-3{padding-left:12px!important}.v-application--is-rtl .ps-xl-3{padding-right:12px!important}.v-application--is-ltr .ps-xl-4{padding-left:16px!important}.v-application--is-rtl .ps-xl-4{padding-right:16px!important}.v-application--is-ltr .ps-xl-5{padding-left:20px!important}.v-application--is-rtl .ps-xl-5{padding-right:20px!important}.v-application--is-ltr .ps-xl-6{padding-left:24px!important}.v-application--is-rtl .ps-xl-6{padding-right:24px!important}.v-application--is-ltr .ps-xl-7{padding-left:28px!important}.v-application--is-rtl .ps-xl-7{padding-right:28px!important}.v-application--is-ltr .ps-xl-8{padding-left:32px!important}.v-application--is-rtl .ps-xl-8{padding-right:32px!important}.v-application--is-ltr .ps-xl-9{padding-left:36px!important}.v-application--is-rtl .ps-xl-9{padding-right:36px!important}.v-application--is-ltr .ps-xl-10{padding-left:40px!important}.v-application--is-rtl .ps-xl-10{padding-right:40px!important}.v-application--is-ltr .ps-xl-11{padding-left:44px!important}.v-application--is-rtl .ps-xl-11{padding-right:44px!important}.v-application--is-ltr .ps-xl-12{padding-left:48px!important}.v-application--is-rtl .ps-xl-12{padding-right:48px!important}.v-application--is-ltr .pe-xl-0{padding-right:0!important}.v-application--is-rtl .pe-xl-0{padding-left:0!important}.v-application--is-ltr .pe-xl-1{padding-right:4px!important}.v-application--is-rtl .pe-xl-1{padding-left:4px!important}.v-application--is-ltr .pe-xl-2{padding-right:8px!important}.v-application--is-rtl .pe-xl-2{padding-left:8px!important}.v-application--is-ltr .pe-xl-3{padding-right:12px!important}.v-application--is-rtl .pe-xl-3{padding-left:12px!important}.v-application--is-ltr .pe-xl-4{padding-right:16px!important}.v-application--is-rtl .pe-xl-4{padding-left:16px!important}.v-application--is-ltr .pe-xl-5{padding-right:20px!important}.v-application--is-rtl .pe-xl-5{padding-left:20px!important}.v-application--is-ltr .pe-xl-6{padding-right:24px!important}.v-application--is-rtl .pe-xl-6{padding-left:24px!important}.v-application--is-ltr .pe-xl-7{padding-right:28px!important}.v-application--is-rtl .pe-xl-7{padding-left:28px!important}.v-application--is-ltr .pe-xl-8{padding-right:32px!important}.v-application--is-rtl .pe-xl-8{padding-left:32px!important}.v-application--is-ltr .pe-xl-9{padding-right:36px!important}.v-application--is-rtl .pe-xl-9{padding-left:36px!important}.v-application--is-ltr .pe-xl-10{padding-right:40px!important}.v-application--is-rtl .pe-xl-10{padding-left:40px!important}.v-application--is-ltr .pe-xl-11{padding-right:44px!important}.v-application--is-rtl .pe-xl-11{padding-left:44px!important}.v-application--is-ltr .pe-xl-12{padding-right:48px!important}.v-application--is-rtl .pe-xl-12{padding-left:48px!important}.v-application .text-xl-left{text-align:left!important}.v-application .text-xl-right{text-align:right!important}.v-application .text-xl-center{text-align:center!important}.v-application .text-xl-justify{text-align:justify!important}.v-application .text-xl-start{text-align:start!important}.v-application .text-xl-end{text-align:end!important}}@media print{.v-application .d-print-none{display:none!important}.v-application .d-print-inline{display:inline!important}.v-application .d-print-inline-block{display:inline-block!important}.v-application .d-print-block{display:block!important}.v-application .d-print-table{display:table!important}.v-application .d-print-table-row{display:table-row!important}.v-application .d-print-table-cell{display:table-cell!important}.v-application .d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.v-application .d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.v-application .float-print-none{float:none!important}.v-application .float-print-left{float:left!important}.v-application .float-print-right{float:right!important}} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/favicon.png b/chameleon-server/src/main/resources/web/favicon.png deleted file mode 100644 index ee155f3b3..000000000 Binary files a/chameleon-server/src/main/resources/web/favicon.png and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.0509ab09.woff2 b/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.0509ab09.woff2 deleted file mode 100644 index 34cdd2afb..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.0509ab09.woff2 and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.29b882f0.woff b/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.29b882f0.woff deleted file mode 100644 index d1c81db61..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.29b882f0.woff and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.96c47680.eot b/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.96c47680.eot deleted file mode 100644 index 17b6f7235..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.96c47680.eot and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.da4ea5cd.ttf b/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.da4ea5cd.ttf deleted file mode 100644 index 377d9247f..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/MaterialIcons-Regular.da4ea5cd.ttf and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.1618c77b.ttf b/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.1618c77b.ttf deleted file mode 100644 index ad3404628..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.1618c77b.ttf and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.927457ed.woff2 b/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.927457ed.woff2 deleted file mode 100644 index b85645f79..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.927457ed.woff2 and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.d6e3eba9.woff b/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.d6e3eba9.woff deleted file mode 100644 index 370839eea..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.d6e3eba9.woff and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.f81583fc.eot b/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.f81583fc.eot deleted file mode 100644 index 5f75021ab..000000000 Binary files a/chameleon-server/src/main/resources/web/fonts/materialdesignicons-webfont.f81583fc.eot and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/img/chessboard.f921ac6e.png b/chameleon-server/src/main/resources/web/img/chessboard.f921ac6e.png deleted file mode 100644 index 39bb399e8..000000000 Binary files a/chameleon-server/src/main/resources/web/img/chessboard.f921ac6e.png and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/img/logo.e82307fd.png b/chameleon-server/src/main/resources/web/img/logo.e82307fd.png deleted file mode 100644 index 0e5825527..000000000 Binary files a/chameleon-server/src/main/resources/web/img/logo.e82307fd.png and /dev/null differ diff --git a/chameleon-server/src/main/resources/web/index.html b/chameleon-server/src/main/resources/web/index.html deleted file mode 100644 index b6608ebfa..000000000 --- a/chameleon-server/src/main/resources/web/index.html +++ /dev/null @@ -1 +0,0 @@ -Chameleon Vision
\ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/app.cca5a176.js b/chameleon-server/src/main/resources/web/js/app.cca5a176.js deleted file mode 100644 index f4f99bbcd..000000000 --- a/chameleon-server/src/main/resources/web/js/app.cca5a176.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var a,r,c=t[0],s=t[1],u=t[2],d=0,l=[];d({timer:void 0}),created(){this.$options.sockets.onmessage=e=>{try{let t=this.$msgPack.decode(e.data);for(let e in t)t.hasOwnProperty(e)&&this.handleMessage(e,t[e])}catch(t){console.error("error: "+e.data+" , "+t)}}},computed:{saveSnackbar:{get(){return this.$store.state.saveBar},set(e){this.$store.commit("saveBar",e)}}}},c=o,s=(n("034f"),n("2877")),u=n("6544"),d=n.n(u),l=n("7496"),h=n("40dc"),p=n("a523"),f=n("a75b"),v=n("0e8f"),m=n("a722"),k=n("2db4"),b=n("71a3"),g=n("fe57"),y=n("2a7f"),w=Object(s["a"])(c,r,i,!1,null,null,null),S=w.exports;d()(w,{VApp:l["a"],VAppBar:h["a"],VContainer:p["a"],VContent:f["a"],VFlex:v["a"],VLayout:m["a"],VSnackbar:k["a"],VTab:b["a"],VTabs:g["a"],VToolbarItems:y["a"],VToolbarTitle:y["b"]});var x=n("8c4f");function C(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(x["a"]);var P=new x["a"]({base:"/",routes:[{path:"/",redirect:"/vision"},{path:"/vision",name:"Vision",component:C("Camera")},{path:"/settings",name:"Settings",component:C("Settings")}]}),T=n("2f62");a["a"].use(T["a"]);const V=e=>(t,n)=>{a["a"].set(t,e,n)};var L=new T["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"chameleon-vision"},pipeline:{exposure:0,brightness:0,rotationMode:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],speckle:5,targetGrouping:0,targetIntersection:0,sortMode:0,multiple:!1,isBinary:0,calibrationMode:0,videoModeIndex:0,streamDivisor:0,is3D:!1,targetRegion:0,targetOrientation:1},cameraSettings:{calibration:[],fov:0,resolution:0,streamDivisor:0,tilt:0},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{},saveBar:!1},mutations:{settings:V("settings"),pipeline:V("pipeline"),cameraSettings:V("cameraSettings"),resolutionList:V("resolutionList"),port:V("port"),currentCameraIndex:V("currentCameraIndex"),currentPipelineIndex:V("currentPipelineIndex"),cameraList:V("cameraList"),pipelineList:V("pipelineList"),point:V("point"),setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])},driverMode:V("driverMode"),saveBar:V("saveBar")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,driverMode:e=>e.driverMode,saveBar:e=>e.saveBar}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var I=new O["a"]({icons:{}}),_=n("b408"),$=n.n(_),M=n("7d47"),j=n.n(M),B=n("bc3a"),E=n.n(B),A=n("a7fe"),D=n.n(A);a["a"].config.productionTip=!1,a["a"].prototype.$address=location.host;const N="ws://"+a["a"].prototype.$address+"/websocket";var F=new WebSocket(N);F.binaryType="arraybuffer",a["a"].use($.a,N,{WebSocket:F}),a["a"].use(D.a,E.a),a["a"].prototype.$msgPack=j()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:L,vuetify:I,render:e=>e(S)}).$mount("#app")},"71ec":function(e,t,n){},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}}); -//# sourceMappingURL=app.cca5a176.js.map \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/app.cca5a176.js.map b/chameleon-server/src/main/resources/web/js/app.cca5a176.js.map deleted file mode 100644 index 6f41e9b93..000000000 --- a/chameleon-server/src/main/resources/web/js/app.cca5a176.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?4c12","webpack:///./src/views lazy ^\\.\\/.*\\.vue$ namespace object","webpack:///./src/App.vue?0d23","webpack:///src/App.vue","webpack:///./src/App.vue?7927","webpack:///./src/App.vue?8ba3","webpack:///./src/router.js","webpack:///./src/store.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js","webpack:///./src/assets/logo.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackAsyncContext","req","ids","id","keys","render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","on","startTimer","model","callback","$$v","saveSnackbar","expression","staticStyle","staticRenderFns","component","VApp","VAppBar","VContainer","VContent","VFlex","VLayout","VSnackbar","VTab","VTabs","VToolbarItems","VToolbar","VToolbarTitle","lazyLoad","view","use","base","routes","path","redirect","set","state","val","Store","settings","teamNumber","connectionType","ip","gateway","netmask","hostname","pipeline","exposure","brightness","rotationMode","hue","saturation","erode","dilate","area","ratio","extent","speckle","targetGrouping","targetIntersection","sortMode","multiple","isBinary","calibrationMode","videoModeIndex","streamDivisor","is3D","targetRegion","targetOrientation","cameraSettings","calibration","fov","resolution","tilt","resolutionList","port","currentCameraIndex","currentPipelineIndex","cameraList","pipelineList","point","saveBar","mutations","obj","driverMode","actions","icons","config","productionTip","$address","location","host","url","ws","WebSocket","binaryType","a","$msgPack","mixin","methods","msg","encode","$socket","send","router","store","vuetify","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,GAAG9B,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,MAIhc,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,GAChPR,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,GAAGxC,IAAUA,GAAW,IAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,iBAAiB,YAAYA,GAAW,OACxayC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,IAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAApBiD,QAAQjC,MAAMhB,GAAYA,GAEnE,IAAIkD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC1QT,yBAA6e,EAAG,G,yCCAhf,IAAI+F,EAAM,CACT,eAAgB,CACf,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,wBAAyB,CACxB,OACA,iBACA,iBACA,kBAED,iCAAkC,CACjC,OACA,iBACA,iBACA,iBACA,kBAED,8BAA+B,CAC9B,OACA,iBACA,iBACA,iBACA,kBAED,+BAAgC,CAC/B,OACA,iBACA,iBACA,kBAED,kCAAmC,CAClC,OACA,iBACA,kBAED,iBAAkB,CACjB,OACA,iBACA,iBACA,iBACA,iBACA,kBAED,+BAAgC,CAC/B,OACA,iBACA,iBACA,iBACA,kBAED,+BAAgC,CAC/B,OACA,iBACA,iBACA,mBAGF,SAASC,EAAoBC,GAC5B,IAAI1F,EAAoBgE,EAAEwB,EAAKE,GAC9B,OAAO9E,QAAQC,UAAU4B,MAAK,WAC7B,IAAIhC,EAAI,IAAI0B,MAAM,uBAAyBuD,EAAM,KAEjD,MADAjF,EAAE2B,KAAO,mBACH3B,KAIR,IAAIkF,EAAMH,EAAIE,GAAME,EAAKD,EAAI,GAC7B,OAAO/E,QAAQ+C,IAAIgC,EAAIJ,MAAM,GAAGC,IAAIxF,EAAoBS,IAAIgC,MAAK,WAChE,OAAOzC,EAAoB4F,MAG7BH,EAAoBI,KAAO,WAC1B,OAAO/G,OAAO+G,KAAKL,IAEpBC,EAAoBG,GAAK,OACzBrF,EAAOD,QAAUmF,G,6EChFbK,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACA,EAAG,YAAY,CAACE,MAAM,CAAC,IAAM,GAAG,MAAQ,GAAG,eAAe,GAAG,KAAO,KAAK,CAACF,EAAG,MAAM,CAACG,YAAY,WAAWD,MAAM,CAAC,IAAM,EAAQ,WAAwBF,EAAG,kBAAkB,CAACE,MAAM,CAAC,GAAK,UAAU,CAACN,EAAIQ,GAAG,sBAAsBJ,EAAG,MAAM,CAACG,YAAY,gBAAgBH,EAAG,kBAAkB,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,OAAS,KAAK,eAAe,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,GAAK,WAAW,CAACN,EAAIQ,GAAG,YAAYJ,EAAG,QAAQ,CAACE,MAAM,CAAC,GAAK,aAAa,CAACN,EAAIQ,GAAG,eAAe,IAAI,IAAI,GAAGJ,EAAG,YAAY,CAACA,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQ,GAAG,cAAc,KAAK,CAACF,EAAG,WAAW,CAACA,EAAG,SAAS,CAACA,EAAG,cAAc,CAACK,GAAG,CAAC,KAAOT,EAAIU,cAAcN,EAAG,aAAa,CAACE,MAAM,CAAC,QAAU,IAAK,IAAM,GAAG,MAAQ,WAAWK,MAAM,CAACnC,MAAOwB,EAAgB,aAAEY,SAAS,SAAUC,GAAMb,EAAIc,aAAaD,GAAKE,WAAW,iBAAiB,CAACX,EAAG,MAAM,CAACY,YAAY,CAAC,aAAa,SAAS,MAAQ,SAAS,CAACZ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,4BAA4B,IAAI,IAAI,IAAI,IAAI,IACzgCS,EAAkB,GC8BtB,GACI,KAAJ,MAEI,WAAJ,GACI,QAAJ,CACQ,cAAR,KACY,GAAZ,oCACgB,KAAhB,wBACA,gDACgB,KAAhB,4CAEgB,OAAhB,GAEoB,QACI,QAAxB,iBAKQ,eACI,cAAZ,YACY,KAAZ,gBACY,KAAZ,+BAEQ,kBACR,gBACgB,cAAhB,YAEY,KAAZ,2CAGI,KAAJ,MACQ,WAAR,IAEI,UACI,KAAR,+BACY,IAEI,IAAhB,+BAEgB,IAAhB,WACA,qBACwB,KAAxB,sBAGA,SACgB,QAAhB,mCAII,SAAJ,CACQ,aAAR,CACY,MACI,OAAhB,2BAEY,IAAZ,GACgB,KAAhB,+BCvF8O,I,qKCQ1OC,EAAY,eACd,EACAnB,EACAkB,GACA,EACA,KACA,KACA,MAIa,EAAAC,EAAiB,QAehC,IAAkBA,EAAW,CAACC,OAAA,KAAKC,UAAA,KAAQC,aAAA,KAAWC,WAAA,KAASC,QAAA,KAAMC,UAAA,KAAQC,YAAA,KAAUC,OAAA,KAAKC,QAAA,KAAMC,cAAAC,EAAA,KAAcC,cAAAD,EAAA,O,gBC9BhH,SAASE,EAASC,GAChB,MAAM,IAAM,UAAO,KAAWA,SAHhC,OAAIC,IAAI,QAKO,UAAI,OAAO,CAExBC,KAAM,IACNC,OAAQ,CACN,CACEC,KAAM,IACNC,SAAS,WAEX,CACED,KAAM,UACN3E,KAAM,SACNyD,UAAWa,EAAS,WAEtB,CACEK,KAAM,YACN3E,KAAM,WACNyD,UAAWa,EAAS,gB,YCpB1B,OAAIE,IAAI,QAER,MAAMK,EAAMxD,GAAO,CAACyD,EAAOC,KACvB,OAAIF,IAAIC,EAAOzD,EAAK0D,IAGT,UAAI,OAAKC,MAAM,CAC1BF,MAAO,CACHG,SAAU,CACNC,WAAY,KACZC,eAAgB,EAChBC,GAAI,GACJC,QAAS,GACTC,QAAS,GACTC,SAAU,oBAEdC,SAAU,CACNC,SAAU,EACVC,WAAY,EACZC,aAAc,EACdC,IAAK,CAAC,EAAG,IACTC,WAAY,CAAC,EAAG,IAChB9E,MAAO,CAAC,EAAG,IACX+E,OAAO,EACPC,QAAQ,EACRC,KAAM,CAAC,EAAG,IACVC,MAAO,CAAC,EAAG,IACXC,OAAQ,CAAC,EAAG,IACZC,QAAS,EACTC,eAAgB,EAChBC,mBAAoB,EACpBC,SAAU,EACVC,UAAU,EACVC,SAAU,EACVC,gBAAiB,EACjBC,eAAgB,EAChBC,cAAe,EACfC,MAAM,EACNC,aAAa,EACbC,kBAAkB,GAEtBC,eAAgB,CACZC,YAAa,GACbC,IAAK,EACLC,WAAY,EACZP,cAAe,EACfQ,KAAM,GAEVC,eAAgB,GAChBC,KAAM,KACNC,mBAAoB,EACpBC,qBAAsB,EACtBC,WAAY,GACZC,aAAc,GACdC,MAAO,GACPC,SAAS,GAEbC,UAAW,CACP3C,SAAUJ,EAAI,YACdW,SAAUX,EAAI,YACdkC,eAAgBlC,EAAI,kBACpBuC,eAAgBvC,EAAI,kBACpBwC,KAAMxC,EAAI,QACVyC,mBAAoBzC,EAAI,sBACxB0C,qBAAsB1C,EAAI,wBAC1B2C,WAAY3C,EAAI,cAChB4C,aAAc5C,EAAI,gBAClB6C,MAAO7C,EAAI,SACX,cAAcC,EAAO+C,GACjB,IAAK,IAAI1M,KAAK0M,EACV,OAAIhD,IAAIC,EAAMU,SAAUrK,EAAG0M,EAAI1M,KAGvC2M,WAAYjD,EAAI,cAChB8C,QAAS9C,EAAI,YAEjBkD,QAAS,CACL9C,SAAUH,GAASA,EAAMG,SACzBO,SAAUV,GAASA,EAAMU,SACzBuB,eAAgBjC,GAASA,EAAMiC,eAC/BK,eAAgBtC,GAASA,EAAMsC,eAC/BC,KAAMvC,GAASA,EAAMuC,KACrBC,mBAAoBxC,GAASA,EAAMwC,mBACnCC,qBAAsBzC,GAASA,EAAMyC,qBACrCC,WAAY1C,GAASA,EAAM0C,WAC3BC,aAAc3C,GAASA,EAAM2C,aAC7BC,MAAO5C,GAASA,EAAM4C,MACtBI,WAAYhD,GAASA,EAAMgD,WAC3BH,QAAS7C,GAASA,EAAM6C,W,kCCtFhC,OAAInD,IAAI,QAEO,UAAI,OAAQ,CACvBwD,MAAO,K,oFCEX,OAAIC,OAAOC,eAAgB,EAGvB,OAAI3M,UAAU4M,SAAWC,SAASC,KAKtC,MAAMC,EAAM,QAAU,OAAI/M,UAAU4M,SAAW,aAC/C,IAAII,EAAK,IAAIC,UAAUF,GACvBC,EAAGE,WAAa,cAEhB,OAAIjE,IAAI,IAAe8D,EAAI,CACvBE,UAAWD,IAEf,OAAI/D,IAAI,IAAU,EAAAkE,GAClB,OAAInN,UAAUoN,SAAW,KAAQ,GAEjC,OAAIC,MAAM,CACNC,QAAS,CACL,YAAYxH,EAAKN,GACb,IAAI+H,EAAMtG,KAAKmG,SAASI,OAAO,CAAC,CAAC1H,GAAMN,IACvCyB,KAAKwG,QAAQC,KAAKH,OAI9B,IAAI,OAAI,CACJI,SACAC,QACAC,UACA9G,OAAQ+G,GAAKA,EAAEC,KAChBC,OAAO,S,8CCzCVxM,EAAOD,QAAU,IAA0B","file":"js/app.cca5a176.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-6516d830\":\"270065e7\",\"chunk-369f5d2c\":\"8e3b6396\",\"chunk-01759076\":\"5c267949\",\"chunk-2d0c7972\":\"adbbf5d7\",\"chunk-423191c4\":\"430d7b21\",\"chunk-6911ca5e\":\"6a2b6398\",\"chunk-586d85e4\":\"7c1f7039\",\"chunk-65ac8106\":\"19dca69f\",\"chunk-6f8eef3f\":\"5538449a\",\"chunk-7d8e2978\":\"07319db3\",\"chunk-6e69a154\":\"4738d1b9\",\"chunk-20681be8\":\"c913200b\",\"chunk-5af10b37\":\"cf8850a1\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-6516d830\":1,\"chunk-369f5d2c\":1,\"chunk-01759076\":1,\"chunk-423191c4\":1,\"chunk-6911ca5e\":1,\"chunk-586d85e4\":1,\"chunk-65ac8106\":1,\"chunk-6f8eef3f\":1,\"chunk-7d8e2978\":1,\"chunk-6e69a154\":1,\"chunk-20681be8\":1,\"chunk-5af10b37\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-6516d830\":\"e951ae66\",\"chunk-369f5d2c\":\"eaa0163e\",\"chunk-01759076\":\"2eb9f3d3\",\"chunk-2d0c7972\":\"31d6cfe0\",\"chunk-423191c4\":\"0a21637d\",\"chunk-6911ca5e\":\"61379667\",\"chunk-586d85e4\":\"873c9690\",\"chunk-65ac8106\":\"108b4a7c\",\"chunk-6f8eef3f\":\"09316a61\",\"chunk-7d8e2978\":\"c741c172\",\"chunk-6e69a154\":\"38f70fef\",\"chunk-20681be8\":\"5ac7b59c\",\"chunk-5af10b37\":\"5b8e5b27\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","var map = {\n\t\"./Camera.vue\": [\n\t\t\"6ec0\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-01759076\",\n\t\t\"chunk-586d85e4\",\n\t\t\"chunk-65ac8106\"\n\t],\n\t\"./CameraViewes/3D.vue\": [\n\t\t\"e4b1\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-586d85e4\"\n\t],\n\t\"./CameraViewes/ContoursTab.vue\": [\n\t\t\"5c73\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-01759076\",\n\t\t\"chunk-6f8eef3f\"\n\t],\n\t\"./CameraViewes/InputTab.vue\": [\n\t\t\"50ef\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-01759076\",\n\t\t\"chunk-2d0c7972\"\n\t],\n\t\"./CameraViewes/OutputTab.vue\": [\n\t\t\"4c92\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-6e69a154\"\n\t],\n\t\"./CameraViewes/ThresholdTab.vue\": [\n\t\t\"1a40\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-5af10b37\"\n\t],\n\t\"./Settings.vue\": [\n\t\t\"26d3\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-01759076\",\n\t\t\"chunk-423191c4\",\n\t\t\"chunk-6911ca5e\"\n\t],\n\t\"./SettingsViewes/Cameras.vue\": [\n\t\t\"0b81\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-369f5d2c\",\n\t\t\"chunk-01759076\",\n\t\t\"chunk-7d8e2978\"\n\t],\n\t\"./SettingsViewes/General.vue\": [\n\t\t\"13f2\",\n\t\t\"chunk-6516d830\",\n\t\t\"chunk-423191c4\",\n\t\t\"chunk-20681be8\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"1a5d\";\nmodule.exports = webpackAsyncContext;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"dense\":\"\",\"clipped-left\":\"\",\"dark\":\"\"}},[_c('img',{staticClass:\"imgClass\",attrs:{\"src\":require(\"./assets/logo.png\")}}),_c('v-toolbar-title',{attrs:{\"id\":\"title\"}},[_vm._v(\"Chameleon Vision\")]),_c('div',{staticClass:\"flex-grow-1\"}),_c('v-toolbar-items',[_c('v-tabs',{attrs:{\"dark\":\"\",\"height\":\"48\",\"slider-color\":\"#4baf62\"}},[_c('v-tab',{attrs:{\"to\":\"vision\"}},[_vm._v(\"Vision\")]),_c('v-tab',{attrs:{\"to\":\"settings\"}},[_vm._v(\"Settings\")])],1)],1)],1),_c('v-content',[_c('v-container',{attrs:{\"fluid\":\"\",\"fill-height\":\"\"}},[_c('v-layout',[_c('v-flex',[_c('router-view',{on:{\"save\":_vm.startTimer}}),_c('v-snackbar',{attrs:{\"timeout\":1000,\"top\":\"\",\"color\":\"#4baf62\"},model:{value:(_vm.saveSnackbar),callback:function ($$v) {_vm.saveSnackbar=$$v},expression:\"saveSnackbar\"}},[_c('div',{staticStyle:{\"text-align\":\"center\",\"width\":\"100%\"}},[_c('h4',[_vm._v(\"Saved All changes\")])])])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=4bfb16b1&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VToolbarItems } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VContainer,VContent,VFlex,VLayout,VSnackbar,VTab,VTabs,VToolbarItems,VToolbarTitle})\n","import Vue from 'vue'\r\nimport Router from 'vue-router'\r\nVue.use(Router);\r\n\r\nfunction lazyLoad(view){\r\n return() => import(`@/views/${view}.vue`)\r\n}\r\nexport default new Router({\r\n // mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes: [\r\n {\r\n path: '/',\r\n redirect:'/vision'\r\n },\r\n {\r\n path: '/vision',\r\n name: 'Vision',\r\n component: lazyLoad('Camera')\r\n },\r\n {\r\n path: '/settings',\r\n name: 'Settings',\r\n component: lazyLoad('Settings')\r\n },\r\n ]\r\n})\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\n\r\nVue.use(Vuex);\r\n\r\nconst set = key => (state, val) => {\r\n Vue.set(state, key, val);\r\n};\r\n\r\nexport default new Vuex.Store({\r\n state: {\r\n settings: {\r\n teamNumber: 1577,\r\n connectionType: 0,\r\n ip: \"\",\r\n gateway: \"\",\r\n netmask: \"\",\r\n hostname: \"chameleon-vision\"\r\n },\r\n pipeline: {\r\n exposure: 0,\r\n brightness: 0,\r\n rotationMode: 0,\r\n hue: [0, 15],\r\n saturation: [0, 15],\r\n value: [0, 25],\r\n erode: false,\r\n dilate: false,\r\n area: [0, 12],\r\n ratio: [0, 12],\r\n extent: [0, 12],\r\n speckle: 5,\r\n targetGrouping: 0,\r\n targetIntersection: 0,\r\n sortMode: 0,\r\n multiple: false,\r\n isBinary: 0,\r\n calibrationMode: 0,\r\n videoModeIndex: 0,\r\n streamDivisor: 0,\r\n is3D: false,\r\n targetRegion:0,\r\n targetOrientation:1\r\n },\r\n cameraSettings: {\r\n calibration: [],\r\n fov: 0,\r\n resolution: 0,\r\n streamDivisor: 0,\r\n tilt: 0\r\n },\r\n resolutionList: [],\r\n port: 1181,\r\n currentCameraIndex: 0,\r\n currentPipelineIndex: 0,\r\n cameraList: [],\r\n pipelineList: [],\r\n point: {},\r\n saveBar: false\r\n },\r\n mutations: {\r\n settings: set('settings'),\r\n pipeline: set('pipeline'),\r\n cameraSettings: set('cameraSettings'),\r\n resolutionList: set('resolutionList'),\r\n port: set('port'),\r\n currentCameraIndex: set('currentCameraIndex'),\r\n currentPipelineIndex: set('currentPipelineIndex'),\r\n cameraList: set('cameraList'),\r\n pipelineList: set('pipelineList'),\r\n point: set('point'),\r\n setPipeValues(state, obj) {\r\n for (let i in obj) {\r\n Vue.set(state.pipeline, i, obj[i]);\r\n }\r\n },\r\n driverMode: set('driverMode'),\r\n saveBar: set(\"saveBar\")\r\n },\r\n actions: {\r\n settings: state => state.settings,\r\n pipeline: state => state.pipeline,\r\n cameraSettings: state => state.cameraSettings,\r\n resolutionList: state => state.resolutionList,\r\n port: state => state.port,\r\n currentCameraIndex: state => state.currentCameraIndex,\r\n currentPipelineIndex: state => state.currentPipelineIndex,\r\n cameraList: state => state.cameraList,\r\n pipelineList: state => state.pipelineList,\r\n point: state => state.point,\r\n driverMode: state => state.driverMode,\r\n saveBar: state => state.saveBar\r\n }\r\n})\r\n","import '@mdi/font/css/materialdesignicons.css';\r\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\r\nimport Vue from 'vue';\r\nimport Vuetify from 'vuetify/lib';\r\n\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({\r\n icons: {}\r\n\r\n});\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport vuetify from './plugins/vuetify';\r\nimport VueNativeSock from 'vue-native-websocket';\r\nimport msgPack from 'msgpack5';\r\nimport axios from 'axios';\r\nimport VueAxios from \"vue-axios\";\r\n\r\nVue.config.productionTip = false;\r\n\r\nif (process.env.NODE_ENV === \"production\"){\r\n Vue.prototype.$address = location.host;\r\n} else if (process.env.NODE_ENV === \"development\"){\r\n Vue.prototype.$address = location.hostname + \":5800\";\r\n}\r\n\r\nconst url = 'ws://' + Vue.prototype.$address + '/websocket';\r\nvar ws = new WebSocket(url);\r\nws.binaryType = \"arraybuffer\";\r\n\r\nVue.use(VueNativeSock, url,{\r\n WebSocket: ws\r\n});\r\nVue.use(VueAxios, axios);\r\nVue.prototype.$msgPack = msgPack(true);\r\n\r\nVue.mixin({\r\n methods: {\r\n handleInput(key, value) {\r\n let msg = this.$msgPack.encode({[key]: value});\r\n this.$socket.send(msg);\r\n }\r\n }\r\n});\r\nnew Vue({\r\n router,\r\n store,\r\n vuetify,\r\n render: h => h(App)\r\n}).$mount('#app');\r\n","module.exports = __webpack_public_path__ + \"img/logo.e82307fd.png\";"],"sourceRoot":""} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js b/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js deleted file mode 100644 index 184f172c1..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js +++ /dev/null @@ -1,2 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-01759076"],{1447:function(t,e,i){"use strict";var s=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("v-row",{attrs:{dense:"",align:"center"}},[i("v-col",{attrs:{cols:2}},[i("span",[t._v(t._s(t.name))])]),i("v-col",{attrs:{cols:10}},[i("v-slider",{staticClass:"align-center",attrs:{value:t.localValue,dark:"",max:t.max,min:t.min,"hide-details":"",color:"#4baf62",step:t.step},on:{start:function(e){t.isClicked=!0},end:function(e){t.isClicked=!1},change:t.handleclick,input:t.handleInput},scopedSlots:t._u([{key:"append",fn:function(){return[i("v-text-field",{staticClass:"mt-0 pt-0",staticStyle:{width:"50px"},attrs:{dark:"",max:t.max,min:t.min,value:t.localValue,"hide-details":"","single-line":"",type:"number",step:t.step},on:{input:t.handleChange,focus:function(e){t.isFocused=!0},blur:function(e){t.isFocused=!1}}})]},proxy:!0}])})],1)],1)],1)},a=[],l={name:"Slider",props:["min","max","name","value","step"],data(){return{isFocused:!1,isClicked:!1}},methods:{handleChange(t){this.isFocused&&(this.localValue=parseFloat(t))},handleInput(t){!this.isFocused&&this.isClicked&&(this.localValue=t)},handleclick(t){this.isFocused||(this.localValue=t)}},computed:{localValue:{get(){return this.value},set(t){this.$emit("input",t)}}}},n=l,r=i("2877"),h=i("6544"),o=i.n(h),u=i("62ad"),c=i("0fd9"),d=i("ba0d"),m=i("8654"),p=Object(r["a"])(n,s,a,!1,null,"3505e445",null);e["a"]=p.exports;o()(p,{VCol:u["a"],VRow:c["a"],VSlider:d["a"],VTextField:m["a"]})},8384:function(t,e,i){"use strict";var s=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("v-row",{attrs:{dense:"",align:"center"}},[i("v-col",{attrs:{cols:3}},[i("span",[t._v(t._s(t.name))])]),i("v-col",{attrs:{cols:9}},[i("v-select",{attrs:{items:t.indexList,"item-text":"name","item-value":"index",dark:"",color:"#4baf62","item-color":"green",disabled:t.disabled},model:{value:t.localValue,callback:function(e){t.localValue=e},expression:"localValue"}})],1)],1)],1)},a=[],l={name:"Select",props:["list","name","value","disabled"],data(){return{}},computed:{localValue:{get(){return this.value},set(t){this.$emit("input",t)}},indexList(){let t=[];for(let e=0;e"boolean"===typeof t||"always"===t},thumbSize:{type:[Number,String],default:32},tickLabels:{type:Array,default:()=>[]},ticks:{type:[Boolean,String],default:!1,validator:t=>"boolean"===typeof t||"always"===t},tickSize:{type:[Number,String],default:2},trackColor:String,trackFillColor:String,value:[Number,String],vertical:Boolean},data:()=>({app:null,oldValue:null,keyPressed:0,isFocused:!1,isActive:!1,noClick:!1}),computed:{classes(){return{...s["a"].options.computed.classes.call(this),"v-input__slider":!0,"v-input__slider--vertical":this.vertical,"v-input__slider--inverse-label":this.inverseLabel}},internalValue:{get(){return this.lazyValue},set(t){t=isNaN(t)?this.minValue:t;const e=this.roundValue(Math.min(Math.max(t,this.minValue),this.maxValue));e!==this.lazyValue&&(this.lazyValue=e,this.$emit("input",e))}},trackTransition(){return this.keyPressed>=2?"none":""},minValue(){return parseFloat(this.min)},maxValue(){return parseFloat(this.max)},stepNumeric(){return this.step>0?parseFloat(this.step):0},inputWidth(){const t=(this.roundValue(this.internalValue)-this.minValue)/(this.maxValue-this.minValue)*100;return t},trackFillStyles(){const t=this.vertical?"bottom":"left",e=this.vertical?"top":"right",i=this.vertical?"height":"width",s=this.$vuetify.rtl?"auto":"0",a=this.$vuetify.rtl?"0":"auto",l=this.disabled?`calc(${this.inputWidth}% - 10px)`:`${this.inputWidth}%`;return{transition:this.trackTransition,[t]:s,[e]:a,[i]:l}},trackStyles(){const t=this.vertical?this.$vuetify.rtl?"bottom":"top":this.$vuetify.rtl?"left":"right",e=this.vertical?"height":"width",i="0px",s=this.disabled?`calc(${100-this.inputWidth}% - 10px)`:`calc(${100-this.inputWidth}%)`;return{transition:this.trackTransition,[t]:i,[e]:s}},showTicks(){return this.tickLabels.length>0||!(this.disabled||!this.stepNumeric||!this.ticks)},numTicks(){return Math.ceil((this.maxValue-this.minValue)/this.stepNumeric)},showThumbLabel(){return!this.disabled&&!(!this.thumbLabel&&!this.$scopedSlots["thumb-label"])},computedTrackColor(){if(!this.disabled)return this.trackColor?this.trackColor:this.isDark?this.validationState:this.validationState||"primary lighten-3"},computedTrackFillColor(){if(!this.disabled)return this.trackFillColor?this.trackFillColor:this.validationState||this.computedColor},computedThumbColor(){return this.thumbColor?this.thumbColor:this.validationState||this.computedColor}},watch:{min(t){const e=parseFloat(t);e>this.internalValue&&this.$emit("input",e)},max(t){const e=parseFloat(t);e{const a=this.$vuetify.rtl?this.maxValue-e:e,l=[];this.tickLabels[a]&&l.push(this.$createElement("div",{staticClass:"v-slider__tick-label"},this.tickLabels[a]));const n=e*(100/this.numTicks),r=this.$vuetify.rtl?100-this.inputWidth0}},a)},genThumbContainer(t,e,i,s,a,l,n,r="thumb"){const h=[this.genThumb()],o=this.genThumbLabelContent(t);return this.showThumbLabel&&h.push(this.genThumbLabel(o)),this.$createElement("div",this.setTextColor(this.computedThumbColor,{ref:r,staticClass:"v-slider__thumb-container",class:{"v-slider__thumb-container--active":i,"v-slider__thumb-container--focused":s,"v-slider__thumb-container--show-label":this.showThumbLabel},style:this.getThumbContainerStyles(e),attrs:{role:"slider",tabindex:this.disabled||this.readonly?-1:this.$attrs.tabindex?this.$attrs.tabindex:0,"aria-label":this.label,"aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this.internalValue,"aria-readonly":String(this.readonly),"aria-orientation":this.vertical?"vertical":"horizontal",...this.$attrs},on:{focus:l,blur:n,keydown:this.onKeyDown,keyup:this.onKeyUp,touchstart:a,mousedown:a}}),h)},genThumbLabelContent(t){return this.$scopedSlots["thumb-label"]?this.$scopedSlots["thumb-label"]({value:t}):[this.$createElement("span",[String(t)])]},genThumbLabel(t){const e=Object(h["f"])(this.thumbSize),i=this.vertical?`translateY(20%) translateY(${Number(this.thumbSize)/3-1}px) translateX(55%) rotate(135deg)`:"translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)";return this.$createElement(a["e"],{props:{origin:"bottom center"}},[this.$createElement("div",{staticClass:"v-slider__thumb-label-container",directives:[{name:"show",value:this.isFocused||this.isActive||"always"===this.thumbLabel}]},[this.$createElement("div",this.setBackgroundColor(this.computedThumbColor,{staticClass:"v-slider__thumb-label",style:{height:e,width:e,transform:i}}),[this.$createElement("div",t)])])])},genThumb(){return this.$createElement("div",this.setBackgroundColor(this.computedThumbColor,{staticClass:"v-slider__thumb"}))},getThumbContainerStyles(t){const e=this.vertical?"top":"left";let i=this.$vuetify.rtl?100-t:t;return i=this.vertical?100-i:i,{transition:this.trackTransition,[e]:`${i}%`}},onThumbMouseDown(t){this.oldValue=this.internalValue,this.keyPressed=2,this.isActive=!0;const e=!h["w"]||{passive:!0,capture:!0},i=!!h["w"]&&{passive:!0};"touches"in t?(this.app.addEventListener("touchmove",this.onMouseMove,i),Object(h["a"])(this.app,"touchend",this.onSliderMouseUp,e)):(this.app.addEventListener("mousemove",this.onMouseMove,i),Object(h["a"])(this.app,"mouseup",this.onSliderMouseUp,e)),this.$emit("start",this.internalValue)},onSliderMouseUp(t){t.stopPropagation(),this.keyPressed=0;const e=!!h["w"]&&{passive:!0};this.app.removeEventListener("touchmove",this.onMouseMove,e),this.app.removeEventListener("mousemove",this.onMouseMove,e),this.$emit("end",this.internalValue),Object(h["i"])(this.oldValue,this.internalValue)||(this.$emit("change",this.internalValue),this.noClick=!0),this.isActive=!1},onMouseMove(t){const{value:e}=this.parseMouseMove(t);this.internalValue=e},onKeyDown(t){if(this.disabled||this.readonly)return;const e=this.parseKeyDown(t,this.internalValue);null!=e&&(this.internalValue=e,this.$emit("change",e))},onKeyUp(){this.keyPressed=0},onSliderClick(t){if(this.noClick)return void(this.noClick=!1);const e=this.$refs.thumb;e.focus(),this.onMouseMove(t),this.$emit("change",this.internalValue)},onBlur(t){this.isFocused=!1,this.$emit("blur",t)},onFocus(t){this.isFocused=!0,this.$emit("focus",t)},parseMouseMove(t){const e=this.vertical?"top":"left",i=this.vertical?"height":"width",s=this.vertical?"clientY":"clientX",{[e]:a,[i]:l}=this.$refs.track.getBoundingClientRect(),n="touches"in t?t.touches[0][s]:t[s];let r=Math.min(Math.max((n-a)/l,0),1)||0;this.vertical&&(r=1-r),this.$vuetify.rtl&&(r=1-r);const h=n>=a&&n<=a+l,o=parseFloat(this.min)+r*(this.maxValue-this.minValue);return{value:o,isInsideTrack:h}},parseKeyDown(t,e){if(this.disabled)return;const{pageup:i,pagedown:s,end:a,home:l,left:n,right:r,down:o,up:u}=h["s"];if(![i,s,a,l,n,r,o,u].includes(t.keyCode))return;t.preventDefault();const c=this.stepNumeric||1,d=(this.maxValue-this.minValue)/c;if([n,r,o,u].includes(t.keyCode)){this.keyPressed+=1;const i=this.$vuetify.rtl?[n,u]:[r,u],s=i.includes(t.keyCode)?1:-1,a=t.shiftKey?3:t.ctrlKey?2:1;e+=s*c*a}else if(t.keyCode===l)e=this.minValue;else if(t.keyCode===a)e=this.maxValue;else{const i=t.keyCode===s?1:-1;e-=i*c*(d>100?d/10:10)}return e},roundValue(t){if(!this.stepNumeric)return t;const e=this.step.toString().trim(),i=e.indexOf(".")>-1?e.length-e.indexOf(".")-1:0,s=this.minValue%this.stepNumeric,a=Math.round((t-s)/this.stepNumeric)*this.stepNumeric+s;return parseFloat(Math.min(a,this.maxValue).toFixed(i))}}})}}]); -//# sourceMappingURL=chunk-01759076.5c267949.js.map \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js.map b/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js.map deleted file mode 100644 index f8252065e..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-01759076.5c267949.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/components/cv-slider.vue?ed8b","webpack:///src/components/cv-slider.vue","webpack:///./src/components/cv-slider.vue?27ec","webpack:///./src/components/cv-slider.vue","webpack:///./src/components/cv-select.vue?fe57","webpack:///src/components/cv-select.vue","webpack:///./src/components/cv-select.vue?97cd","webpack:///./src/components/cv-select.vue","webpack:///./node_modules/vuetify/lib/components/VSlider/VSlider.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","_v","_s","name","staticClass","localValue","max","min","step","on","$event","isClicked","handleclick","handleInput","scopedSlots","_u","key","fn","staticStyle","handleChange","isFocused","proxy","staticRenderFns","component","VCol","VRow","VSlider","VTextField","indexList","disabled","model","value","callback","$$v","expression","VSelect","extend","directives","ClickOutside","mixins","props","Boolean","inverseLabel","type","Number","String","default","thumbColor","thumbLabel","undefined","validator","v","thumbSize","tickLabels","Array","ticks","tickSize","trackColor","trackFillColor","vertical","data","app","oldValue","keyPressed","isActive","noClick","computed","options","classes","call","internalValue","lazyValue","val","isNaN","minValue","roundValue","Math","maxValue","$emit","parseFloat","startDir","endDir","valueDir","start","$vuetify","rtl","end","inputWidth","transition","trackTransition","length","stepNumeric","ceil","$scopedSlots","isDark","validationState","computedColor","watch","parsed","document","querySelector","methods","children","genLabel","slider","genSlider","unshift","push","genProgress","class","readonly","themeClasses","onBlur","click","onSliderClick","genChildren","genInput","genTrackContainer","genSteps","genThumbContainer","onThumbMouseDown","onFocus","id","computedId","tabindex","$attrs","setBackgroundColor","computedTrackColor","style","trackStyles","computedTrackFillColor","trackFillStyles","ref","showTicks","range","numTicks","direction","offsetDirection","reverse","map","i","index","width","filled","height","valueWidth","onDrag","genThumb","thumbLabelContent","genThumbLabelContent","showThumbLabel","genThumbLabel","setTextColor","computedThumbColor","getThumbContainerStyles","role","label","focus","blur","keydown","onKeyDown","keyup","onKeyUp","touchstart","mousedown","content","size","transform","origin","e","mouseUpOptions","passive","capture","mouseMoveOptions","addEventListener","onMouseMove","onSliderMouseUp","stopPropagation","removeEventListener","parseMouseMove","parseKeyDown","thumb","$refs","trackStart","trackLength","track","getBoundingClientRect","clickOffset","touches","clickPos","isInsideTrack","pageup","pagedown","home","left","right","down","up","includes","keyCode","preventDefault","steps","increase","multiplier","shiftKey","ctrlKey","trimmedStep","toString","trim","decimals","indexOf","offset","newValue","round","toFixed"],"mappings":"gHAAA,IAAIA,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,GAAG,MAAQ,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAI,CAACF,EAAG,OAAO,CAACJ,EAAIO,GAAGP,EAAIQ,GAAGR,EAAIS,WAAWL,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,WAAW,CAACM,YAAY,eAAeJ,MAAM,CAAC,MAAQN,EAAIW,WAAW,KAAO,GAAG,IAAMX,EAAIY,IAAI,IAAMZ,EAAIa,IAAI,eAAe,GAAG,MAAQ,UAAU,KAAOb,EAAIc,MAAMC,GAAG,CAAC,MAAQ,SAASC,GAAQhB,EAAIiB,WAAY,GAAM,IAAM,SAASD,GAAQhB,EAAIiB,WAAY,GAAO,OAASjB,EAAIkB,YAAY,MAAQlB,EAAImB,aAAaC,YAAYpB,EAAIqB,GAAG,CAAC,CAACC,IAAI,SAASC,GAAG,WAAW,MAAO,CAACnB,EAAG,eAAe,CAACM,YAAY,YAAYc,YAAY,CAAC,MAAQ,QAAQlB,MAAM,CAAC,KAAO,GAAG,IAAMN,EAAIY,IAAI,IAAMZ,EAAIa,IAAI,MAAQb,EAAIW,WAAW,eAAe,GAAG,cAAc,GAAG,KAAO,SAAS,KAAOX,EAAIc,MAAMC,GAAG,CAAC,MAAQf,EAAIyB,aAAa,MAAQ,SAAST,GAAQhB,EAAI0B,WAAY,GAAM,KAAO,SAASV,GAAQhB,EAAI0B,WAAY,QAAYC,OAAM,QAAW,IAAI,IAAI,IACt9BC,EAAkB,GCqBtB,GACI,KAAJ,SACI,MAAJ,oCACI,OACI,MAAR,CACY,WAAZ,EACY,WAAZ,IAGI,QAAJ,CACQ,aAAR,GACA,iBACgB,KAAhB,2BAGQ,YAAR,IACA,iCACgB,KAAhB,eAGQ,YAAR,GACA,iBACgB,KAAhB,gBAII,SAAJ,CACQ,WAAR,CACY,MACI,OAAhB,YAEY,IAAZ,GACgB,KAAhB,qBCtD6P,I,iFCOzPC,EAAY,eACd,EACA9B,EACA6B,GACA,EACA,KACA,WACA,MAIa,OAAAC,EAAiB,QAQhC,IAAkBA,EAAW,CAACC,OAAA,KAAKC,OAAA,KAAKC,UAAA,KAAQC,aAAA,Q,kCC1BhD,IAAIlC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,GAAG,MAAQ,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAI,CAACF,EAAG,OAAO,CAACJ,EAAIO,GAAGP,EAAIQ,GAAGR,EAAIS,WAAWL,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAI,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQN,EAAIkC,UAAU,YAAY,OAAO,aAAa,QAAQ,KAAO,GAAG,MAAQ,UAAU,aAAa,QAAQ,SAAWlC,EAAImC,UAAUC,MAAM,CAACC,MAAOrC,EAAc,WAAEsC,SAAS,SAAUC,GAAMvC,EAAIW,WAAW4B,GAAKC,WAAW,iBAAiB,IAAI,IAAI,IAC3gBZ,EAAkB,GCctB,GACI,KAAJ,SACI,MAAJ,mCACI,OACI,MAAR,IAEI,SAAJ,CACQ,WAAR,CACY,MACI,OAAhB,YAEY,IAAZ,GACgB,KAAhB,mBAGQ,YACI,IAAZ,KACY,IAAZ,+BACgB,EAAhB,MACoB,KAApB,aACoB,MAApB,IAGY,OAAZ,KCtC6P,I,qECOzPC,EAAY,eACd,EACA9B,EACA6B,GACA,EACA,KACA,KACA,MAIa,OAAAC,EAAiB,QAOhC,IAAkBA,EAAW,CAACC,OAAA,KAAKC,OAAA,KAAKU,UAAA,Q,2DCzBxC,kGAYe,sBAAO,OAAQ,QAE5BC,OAAO,CACPjC,KAAM,WACNkC,WAAY,CACVC,aAAA,QAEFC,OAAQ,CAAC,QACTC,MAAO,CACLX,SAAUY,QACVC,aAAcD,QACdnC,IAAK,CACHqC,KAAM,CAACC,OAAQC,QACfC,QAAS,KAEXvC,IAAK,CACHoC,KAAM,CAACC,OAAQC,QACfC,QAAS,GAEXtC,KAAM,CACJmC,KAAM,CAACC,OAAQC,QACfC,QAAS,GAEXC,WAAYF,OACZG,WAAY,CACVL,KAAM,CAACF,QAASI,QAChBC,aAASG,EACTC,UAAWC,GAAkB,mBAANA,GAAyB,WAANA,GAE5CC,UAAW,CACTT,KAAM,CAACC,OAAQC,QACfC,QAAS,IAEXO,WAAY,CACVV,KAAMW,MACNR,QAAS,IAAM,IAEjBS,MAAO,CACLZ,KAAM,CAACF,QAASI,QAChBC,SAAS,EACTI,UAAWC,GAAkB,mBAANA,GAAyB,WAANA,GAE5CK,SAAU,CACRb,KAAM,CAACC,OAAQC,QACfC,QAAS,GAEXW,WAAYZ,OACZa,eAAgBb,OAChBd,MAAO,CAACa,OAAQC,QAChBc,SAAUlB,SAEZmB,KAAM,KAAM,CACVC,IAAK,KACLC,SAAU,KACVC,WAAY,EACZ3C,WAAW,EACX4C,UAAU,EACVC,SAAS,IAEXC,SAAU,CACR,UACE,MAAO,IAAK,OAAOC,QAAQD,SAASE,QAAQC,KAAK1E,MAC/C,mBAAmB,EACnB,4BAA6BA,KAAKgE,SAClC,iCAAkChE,KAAK+C,eAI3C4B,cAAe,CACb,MACE,OAAO3E,KAAK4E,WAGd,IAAIC,GACFA,EAAMC,MAAMD,GAAO7E,KAAK+E,SAAWF,EAInC,MAAMzC,EAAQpC,KAAKgF,WAAWC,KAAKrE,IAAIqE,KAAKtE,IAAIkE,EAAK7E,KAAK+E,UAAW/E,KAAKkF,WACtE9C,IAAUpC,KAAK4E,YACnB5E,KAAK4E,UAAYxC,EACjBpC,KAAKmF,MAAM,QAAS/C,MAKxB,kBACE,OAAOpC,KAAKoE,YAAc,EAAI,OAAS,IAGzC,WACE,OAAOgB,WAAWpF,KAAKY,MAGzB,WACE,OAAOwE,WAAWpF,KAAKW,MAGzB,cACE,OAAOX,KAAKa,KAAO,EAAIuE,WAAWpF,KAAKa,MAAQ,GAGjD,aACE,MAAMuB,GAASpC,KAAKgF,WAAWhF,KAAK2E,eAAiB3E,KAAK+E,WAAa/E,KAAKkF,SAAWlF,KAAK+E,UAAY,IACxG,OAAO3C,GAGT,kBACE,MAAMiD,EAAWrF,KAAKgE,SAAW,SAAW,OACtCsB,EAAStF,KAAKgE,SAAW,MAAQ,QACjCuB,EAAWvF,KAAKgE,SAAW,SAAW,QACtCwB,EAAQxF,KAAKyF,SAASC,IAAM,OAAS,IACrCC,EAAM3F,KAAKyF,SAASC,IAAM,IAAM,OAChCtD,EAAQpC,KAAKkC,SAAW,QAAQlC,KAAK4F,sBAAwB,GAAG5F,KAAK4F,cAC3E,MAAO,CACLC,WAAY7F,KAAK8F,gBACjB,CAACT,GAAWG,EACZ,CAACF,GAASK,EACV,CAACJ,GAAWnD,IAIhB,cACE,MAAMiD,EAAWrF,KAAKgE,SAAWhE,KAAKyF,SAASC,IAAM,SAAW,MAAQ1F,KAAKyF,SAASC,IAAM,OAAS,QAC/FJ,EAAStF,KAAKgE,SAAW,SAAW,QACpCwB,EAAQ,MACRG,EAAM3F,KAAKkC,SAAW,QAAQ,IAAMlC,KAAK4F,sBAAwB,QAAQ,IAAM5F,KAAK4F,eAC1F,MAAO,CACLC,WAAY7F,KAAK8F,gBACjB,CAACT,GAAWG,EACZ,CAACF,GAASK,IAId,YACE,OAAO3F,KAAK0D,WAAWqC,OAAS,KAAS/F,KAAKkC,WAAYlC,KAAKgG,cAAehG,KAAK4D,QAGrF,WACE,OAAOqB,KAAKgB,MAAMjG,KAAKkF,SAAWlF,KAAK+E,UAAY/E,KAAKgG,cAG1D,iBACE,OAAQhG,KAAKkC,aAAelC,KAAKqD,aAAcrD,KAAKkG,aAAa,iBAGnE,qBACE,IAAIlG,KAAKkC,SACT,OAAIlC,KAAK8D,WAAmB9D,KAAK8D,WAC7B9D,KAAKmG,OAAenG,KAAKoG,gBACtBpG,KAAKoG,iBAAmB,qBAGjC,yBACE,IAAIpG,KAAKkC,SACT,OAAIlC,KAAK+D,eAAuB/D,KAAK+D,eAC9B/D,KAAKoG,iBAAmBpG,KAAKqG,eAGtC,qBACE,OAAIrG,KAAKoD,WAAmBpD,KAAKoD,WAC1BpD,KAAKoG,iBAAmBpG,KAAKqG,gBAIxCC,MAAO,CACL,IAAIzB,GACF,MAAM0B,EAASnB,WAAWP,GAC1B0B,EAASvG,KAAK2E,eAAiB3E,KAAKmF,MAAM,QAASoB,IAGrD,IAAI1B,GACF,MAAM0B,EAASnB,WAAWP,GAC1B0B,EAASvG,KAAK2E,eAAiB3E,KAAKmF,MAAM,QAASoB,IAGrDnE,MAAO,CACL,QAAQoB,GACNxD,KAAK2E,cAAgBnB,KAS3B,cACExD,KAAK2E,cAAgB3E,KAAKoC,OAG5B,UAEEpC,KAAKkE,IAAMsC,SAASC,cAAc,eAAiB,eAAY,6EAA8EzG,OAG/I0G,QAAS,CACP,iBACE,MAAMC,EAAW,CAAC3G,KAAK4G,YACjBC,EAAS7G,KAAK8G,YAGpB,OAFA9G,KAAK+C,aAAe4D,EAASI,QAAQF,GAAUF,EAASK,KAAKH,GAC7DF,EAASK,KAAKhH,KAAKiH,eACZN,GAGT,YACE,OAAO3G,KAAKE,eAAe,MAAO,CAChCgH,MAAO,CACL,YAAY,EACZ,wBAAyBlH,KAAKgE,SAC9B,qBAAsBhE,KAAKgE,SAC3B,oBAAqBhE,KAAKyB,UAC1B,mBAAoBzB,KAAKqE,SACzB,qBAAsBrE,KAAKkC,SAC3B,qBAAsBlC,KAAKmH,YACxBnH,KAAKoH,cAEV1E,WAAY,CAAC,CACXlC,KAAM,gBACN4B,MAAOpC,KAAKqH,SAEdvG,GAAI,CACFwG,MAAOtH,KAAKuH,gBAEbvH,KAAKwH,gBAGV,cACE,MAAO,CAACxH,KAAKyH,WAAYzH,KAAK0H,oBAAqB1H,KAAK2H,WAAY3H,KAAK4H,kBAAkB5H,KAAK2E,cAAe3E,KAAK4F,WAAY5F,KAAKqE,SAAUrE,KAAKyB,UAAWzB,KAAK6H,iBAAkB7H,KAAK8H,QAAS9H,KAAKqH,UAG3M,WACE,OAAOrH,KAAKE,eAAe,QAAS,CAClCG,MAAO,CACL+B,MAAOpC,KAAK2E,cACZoD,GAAI/H,KAAKgI,WACT9F,SAAUlC,KAAKkC,SACfiF,UAAU,EACVc,UAAW,KACRjI,KAAKkI,WAKd,oBACE,MAAMvB,EAAW,CAAC3G,KAAKE,eAAe,MAAOF,KAAKmI,mBAAmBnI,KAAKoI,mBAAoB,CAC5F3H,YAAa,6BACb4H,MAAOrI,KAAKsI,eACTtI,KAAKE,eAAe,MAAOF,KAAKmI,mBAAmBnI,KAAKuI,uBAAwB,CACnF9H,YAAa,uBACb4H,MAAOrI,KAAKwI,oBAEd,OAAOxI,KAAKE,eAAe,MAAO,CAChCO,YAAa,4BACbgI,IAAK,SACJ9B,IAGL,WACE,IAAK3G,KAAKa,OAASb,KAAK0I,UAAW,OAAO,KAC1C,MAAM7E,EAAWuB,WAAWpF,KAAK6D,UAC3B8E,EAAQ,eAAY3I,KAAK4I,SAAW,GACpCC,EAAY7I,KAAKgE,SAAW,SAAW,OACvC8E,EAAkB9I,KAAKgE,SAAW,QAAU,MAC9ChE,KAAKgE,UAAU2E,EAAMI,UACzB,MAAMnF,EAAQ+E,EAAMK,IAAIC,IACtB,MAAMC,EAAQlJ,KAAKyF,SAASC,IAAM1F,KAAKkF,SAAW+D,EAAIA,EAChDtC,EAAW,GAEb3G,KAAK0D,WAAWwF,IAClBvC,EAASK,KAAKhH,KAAKE,eAAe,MAAO,CACvCO,YAAa,wBACZT,KAAK0D,WAAWwF,KAGrB,MAAMC,EAAQF,GAAK,IAAMjJ,KAAK4I,UACxBQ,EAASpJ,KAAKyF,SAASC,IAAM,IAAM1F,KAAK4F,WAAauD,EAAQA,EAAQnJ,KAAK4F,WAChF,OAAO5F,KAAKE,eAAe,OAAQ,CACjCmB,IAAK4H,EACLxI,YAAa,iBACbyG,MAAO,CACL,yBAA0BkC,GAE5Bf,MAAO,CACLc,MAAO,GAAGtF,MACVwF,OAAQ,GAAGxF,MACX,CAACgF,GAAY,QAAQM,QAAYtF,EAAW,OAC5C,CAACiF,GAAkB,cAAcjF,EAAW,SAE7C8C,KAEL,OAAO3G,KAAKE,eAAe,MAAO,CAChCO,YAAa,4BACbyG,MAAO,CACL,yCAAyD,WAAflH,KAAK4D,OAAsB5D,KAAK0D,WAAWqC,OAAS,IAE/FnC,IAGL,kBAAkBxB,EAAOkH,EAAYjF,EAAU5C,EAAW8H,EAAQzB,EAAST,EAAQoB,EAAM,SACvF,MAAM9B,EAAW,CAAC3G,KAAKwJ,YACjBC,EAAoBzJ,KAAK0J,qBAAqBtH,GAEpD,OADApC,KAAK2J,gBAAkBhD,EAASK,KAAKhH,KAAK4J,cAAcH,IACjDzJ,KAAKE,eAAe,MAAOF,KAAK6J,aAAa7J,KAAK8J,mBAAoB,CAC3ErB,MACAhI,YAAa,4BACbyG,MAAO,CACL,oCAAqC7C,EACrC,qCAAsC5C,EACtC,wCAAyCzB,KAAK2J,gBAEhDtB,MAAOrI,KAAK+J,wBAAwBT,GACpCjJ,MAAO,CACL2J,KAAM,SACN/B,SAAUjI,KAAKkC,UAAYlC,KAAKmH,UAAY,EAAInH,KAAKkI,OAAOD,SAAWjI,KAAKkI,OAAOD,SAAW,EAC9F,aAAcjI,KAAKiK,MACnB,gBAAiBjK,KAAKY,IACtB,gBAAiBZ,KAAKW,IACtB,gBAAiBX,KAAK2E,cACtB,gBAAiBzB,OAAOlD,KAAKmH,UAC7B,mBAAoBnH,KAAKgE,SAAW,WAAa,gBAC9ChE,KAAKkI,QAEVpH,GAAI,CACFoJ,MAAOpC,EACPqC,KAAM9C,EACN+C,QAASpK,KAAKqK,UACdC,MAAOtK,KAAKuK,QACZC,WAAYjB,EACZkB,UAAWlB,KAEX5C,IAGN,qBAAqBvE,GACnB,OAAOpC,KAAKkG,aAAa,eAAiBlG,KAAKkG,aAAa,eAAe,CACzE9D,UACG,CAACpC,KAAKE,eAAe,OAAQ,CAACgD,OAAOd,OAG5C,cAAcsI,GACZ,MAAMC,EAAO,eAAc3K,KAAKyD,WAC1BmH,EAAY5K,KAAKgE,SAAW,8BAA8Bf,OAAOjD,KAAKyD,WAAa,EAAI,sCAAwC,oEACrI,OAAOzD,KAAKE,eAAe,OAAkB,CAC3C2C,MAAO,CACLgI,OAAQ,kBAET,CAAC7K,KAAKE,eAAe,MAAO,CAC7BO,YAAa,kCACbiC,WAAY,CAAC,CACXlC,KAAM,OACN4B,MAAOpC,KAAKyB,WAAazB,KAAKqE,UAAgC,WAApBrE,KAAKqD,cAEhD,CAACrD,KAAKE,eAAe,MAAOF,KAAKmI,mBAAmBnI,KAAK8J,mBAAoB,CAC9ErJ,YAAa,wBACb4H,MAAO,CACLgB,OAAQsB,EACRxB,MAAOwB,EACPC,eAEA,CAAC5K,KAAKE,eAAe,MAAOwK,UAGlC,WACE,OAAO1K,KAAKE,eAAe,MAAOF,KAAKmI,mBAAmBnI,KAAK8J,mBAAoB,CACjFrJ,YAAa,sBAIjB,wBAAwB0I,GACtB,MAAMN,EAAY7I,KAAKgE,SAAW,MAAQ,OAC1C,IAAI5B,EAAQpC,KAAKyF,SAASC,IAAM,IAAMyD,EAAQA,EAE9C,OADA/G,EAAQpC,KAAKgE,SAAW,IAAM5B,EAAQA,EAC/B,CACLyD,WAAY7F,KAAK8F,gBACjB,CAAC+C,GAAY,GAAGzG,OAIpB,iBAAiB0I,GACf9K,KAAKmE,SAAWnE,KAAK2E,cACrB3E,KAAKoE,WAAa,EAClBpE,KAAKqE,UAAW,EAChB,MAAM0G,GAAiB,QAAmB,CACxCC,SAAS,EACTC,SAAS,GAELC,IAAmB,QAAmB,CAC1CF,SAAS,GAGP,YAAaF,GACf9K,KAAKkE,IAAIiH,iBAAiB,YAAanL,KAAKoL,YAAaF,GACzD,eAAqBlL,KAAKkE,IAAK,WAAYlE,KAAKqL,gBAAiBN,KAEjE/K,KAAKkE,IAAIiH,iBAAiB,YAAanL,KAAKoL,YAAaF,GACzD,eAAqBlL,KAAKkE,IAAK,UAAWlE,KAAKqL,gBAAiBN,IAGlE/K,KAAKmF,MAAM,QAASnF,KAAK2E,gBAG3B,gBAAgBmG,GACdA,EAAEQ,kBACFtL,KAAKoE,WAAa,EAClB,MAAM8G,IAAmB,QAAmB,CAC1CF,SAAS,GAEXhL,KAAKkE,IAAIqH,oBAAoB,YAAavL,KAAKoL,YAAaF,GAC5DlL,KAAKkE,IAAIqH,oBAAoB,YAAavL,KAAKoL,YAAaF,GAC5DlL,KAAKmF,MAAM,MAAOnF,KAAK2E,eAElB,eAAU3E,KAAKmE,SAAUnE,KAAK2E,iBACjC3E,KAAKmF,MAAM,SAAUnF,KAAK2E,eAC1B3E,KAAKsE,SAAU,GAGjBtE,KAAKqE,UAAW,GAGlB,YAAYyG,GACV,MAAM,MACJ1I,GACEpC,KAAKwL,eAAeV,GACxB9K,KAAK2E,cAAgBvC,GAGvB,UAAU0I,GACR,GAAI9K,KAAKkC,UAAYlC,KAAKmH,SAAU,OACpC,MAAM/E,EAAQpC,KAAKyL,aAAaX,EAAG9K,KAAK2E,eAC3B,MAATvC,IACJpC,KAAK2E,cAAgBvC,EACrBpC,KAAKmF,MAAM,SAAU/C,KAGvB,UACEpC,KAAKoE,WAAa,GAGpB,cAAc0G,GACZ,GAAI9K,KAAKsE,QAEP,YADAtE,KAAKsE,SAAU,GAIjB,MAAMoH,EAAQ1L,KAAK2L,MAAMD,MACzBA,EAAMxB,QACNlK,KAAKoL,YAAYN,GACjB9K,KAAKmF,MAAM,SAAUnF,KAAK2E,gBAG5B,OAAOmG,GACL9K,KAAKyB,WAAY,EACjBzB,KAAKmF,MAAM,OAAQ2F,IAGrB,QAAQA,GACN9K,KAAKyB,WAAY,EACjBzB,KAAKmF,MAAM,QAAS2F,IAGtB,eAAeA,GACb,MAAMtF,EAAQxF,KAAKgE,SAAW,MAAQ,OAChC+B,EAAS/F,KAAKgE,SAAW,SAAW,QACpCsD,EAAQtH,KAAKgE,SAAW,UAAY,WAExC,CAACwB,GAAQoG,EACT,CAAC7F,GAAS8F,GACR7L,KAAK2L,MAAMG,MAAMC,wBACfC,EAAc,YAAalB,EAAIA,EAAEmB,QAAQ,GAAG3E,GAASwD,EAAExD,GAG7D,IAAI4E,EAAWjH,KAAKrE,IAAIqE,KAAKtE,KAAKqL,EAAcJ,GAAcC,EAAa,GAAI,IAAM,EACjF7L,KAAKgE,WAAUkI,EAAW,EAAIA,GAC9BlM,KAAKyF,SAASC,MAAKwG,EAAW,EAAIA,GACtC,MAAMC,EAAgBH,GAAeJ,GAAcI,GAAeJ,EAAaC,EACzEzJ,EAAQgD,WAAWpF,KAAKY,KAAOsL,GAAYlM,KAAKkF,SAAWlF,KAAK+E,UACtE,MAAO,CACL3C,QACA+J,kBAIJ,aAAarB,EAAG1I,GACd,GAAIpC,KAAKkC,SAAU,OACnB,MAAM,OACJkK,EAAM,SACNC,EAAQ,IACR1G,EAAG,KACH2G,EAAI,KACJC,EAAI,MACJC,EAAK,KACLC,EAAI,GACJC,GACE,OACJ,IAAK,CAACN,EAAQC,EAAU1G,EAAK2G,EAAMC,EAAMC,EAAOC,EAAMC,GAAIC,SAAS7B,EAAE8B,SAAU,OAC/E9B,EAAE+B,iBACF,MAAMhM,EAAOb,KAAKgG,aAAe,EAC3B8G,GAAS9M,KAAKkF,SAAWlF,KAAK+E,UAAYlE,EAEhD,GAAI,CAAC0L,EAAMC,EAAOC,EAAMC,GAAIC,SAAS7B,EAAE8B,SAAU,CAC/C5M,KAAKoE,YAAc,EACnB,MAAM2I,EAAW/M,KAAKyF,SAASC,IAAM,CAAC6G,EAAMG,GAAM,CAACF,EAAOE,GACpD7D,EAAYkE,EAASJ,SAAS7B,EAAE8B,SAAW,GAAK,EAChDI,EAAalC,EAAEmC,SAAW,EAAInC,EAAEoC,QAAU,EAAI,EACpD9K,GAAgByG,EAAYhI,EAAOmM,OAC9B,GAAIlC,EAAE8B,UAAYN,EACvBlK,EAAQpC,KAAK+E,cACR,GAAI+F,EAAE8B,UAAYjH,EACvBvD,EAAQpC,KAAKkF,aACR,CACL,MAAM2D,EAAYiC,EAAE8B,UAAYP,EAAW,GAAK,EAChDjK,GAAgByG,EAAYhI,GAAQiM,EAAQ,IAAMA,EAAQ,GAAK,IAGjE,OAAO1K,GAGT,WAAWA,GACT,IAAKpC,KAAKgG,YAAa,OAAO5D,EAG9B,MAAM+K,EAAcnN,KAAKa,KAAKuM,WAAWC,OACnCC,EAAWH,EAAYI,QAAQ,MAAQ,EAAIJ,EAAYpH,OAASoH,EAAYI,QAAQ,KAAO,EAAI,EAC/FC,EAASxN,KAAK+E,SAAW/E,KAAKgG,YAC9ByH,EAAWxI,KAAKyI,OAAOtL,EAAQoL,GAAUxN,KAAKgG,aAAehG,KAAKgG,YAAcwH,EACtF,OAAOpI,WAAWH,KAAKrE,IAAI6M,EAAUzN,KAAKkF,UAAUyI,QAAQL","file":"js/chunk-01759076.5c267949.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',{attrs:{\"dense\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":2}},[_c('span',[_vm._v(_vm._s(_vm.name))])]),_c('v-col',{attrs:{\"cols\":10}},[_c('v-slider',{staticClass:\"align-center\",attrs:{\"value\":_vm.localValue,\"dark\":\"\",\"max\":_vm.max,\"min\":_vm.min,\"hide-details\":\"\",\"color\":\"#4baf62\",\"step\":_vm.step},on:{\"start\":function($event){_vm.isClicked = true},\"end\":function($event){_vm.isClicked = false},\"change\":_vm.handleclick,\"input\":_vm.handleInput},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c('v-text-field',{staticClass:\"mt-0 pt-0\",staticStyle:{\"width\":\"50px\"},attrs:{\"dark\":\"\",\"max\":_vm.max,\"min\":_vm.min,\"value\":_vm.localValue,\"hide-details\":\"\",\"single-line\":\"\",\"type\":\"number\",\"step\":_vm.step},on:{\"input\":_vm.handleChange,\"focus\":function($event){_vm.isFocused = true},\"blur\":function($event){_vm.isFocused = false}}})]},proxy:true}])})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-slider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-slider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cv-slider.vue?vue&type=template&id=3505e445&scoped=true&\"\nimport script from \"./cv-slider.vue?vue&type=script&lang=js&\"\nexport * from \"./cv-slider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3505e445\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCol,VRow,VSlider,VTextField})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',{attrs:{\"dense\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":3}},[_c('span',[_vm._v(_vm._s(_vm.name))])]),_c('v-col',{attrs:{\"cols\":9}},[_c('v-select',{attrs:{\"items\":_vm.indexList,\"item-text\":\"name\",\"item-value\":\"index\",\"dark\":\"\",\"color\":\"#4baf62\",\"item-color\":\"green\",\"disabled\":_vm.disabled},model:{value:(_vm.localValue),callback:function ($$v) {_vm.localValue=$$v},expression:\"localValue\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cv-select.vue?vue&type=template&id=818a5508&\"\nimport script from \"./cv-select.vue?vue&type=script&lang=js&\"\nexport * from \"./cv-select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VCol,VRow,VSelect})\n","import \"../../../src/components/VSlider/VSlider.sass\"; // Components\n\nimport VInput from '../VInput';\nimport { VScaleTransition } from '../transitions'; // Mixins\n\nimport mixins from '../../util/mixins';\nimport Loadable from '../../mixins/loadable'; // Directives\n\nimport ClickOutside from '../../directives/click-outside'; // Helpers\n\nimport { addOnceEventListener, deepEqual, keyCodes, createRange, convertToUnit, passiveSupported } from '../../util/helpers';\nimport { consoleWarn } from '../../util/console';\nexport default mixins(VInput, Loadable\n/* @vue/component */\n).extend({\n name: 'v-slider',\n directives: {\n ClickOutside\n },\n mixins: [Loadable],\n props: {\n disabled: Boolean,\n inverseLabel: Boolean,\n max: {\n type: [Number, String],\n default: 100\n },\n min: {\n type: [Number, String],\n default: 0\n },\n step: {\n type: [Number, String],\n default: 1\n },\n thumbColor: String,\n thumbLabel: {\n type: [Boolean, String],\n default: undefined,\n validator: v => typeof v === 'boolean' || v === 'always'\n },\n thumbSize: {\n type: [Number, String],\n default: 32\n },\n tickLabels: {\n type: Array,\n default: () => []\n },\n ticks: {\n type: [Boolean, String],\n default: false,\n validator: v => typeof v === 'boolean' || v === 'always'\n },\n tickSize: {\n type: [Number, String],\n default: 2\n },\n trackColor: String,\n trackFillColor: String,\n value: [Number, String],\n vertical: Boolean\n },\n data: () => ({\n app: null,\n oldValue: null,\n keyPressed: 0,\n isFocused: false,\n isActive: false,\n noClick: false\n }),\n computed: {\n classes() {\n return { ...VInput.options.computed.classes.call(this),\n 'v-input__slider': true,\n 'v-input__slider--vertical': this.vertical,\n 'v-input__slider--inverse-label': this.inverseLabel\n };\n },\n\n internalValue: {\n get() {\n return this.lazyValue;\n },\n\n set(val) {\n val = isNaN(val) ? this.minValue : val; // Round value to ensure the\n // entire slider range can\n // be selected with step\n\n const value = this.roundValue(Math.min(Math.max(val, this.minValue), this.maxValue));\n if (value === this.lazyValue) return;\n this.lazyValue = value;\n this.$emit('input', value);\n }\n\n },\n\n trackTransition() {\n return this.keyPressed >= 2 ? 'none' : '';\n },\n\n minValue() {\n return parseFloat(this.min);\n },\n\n maxValue() {\n return parseFloat(this.max);\n },\n\n stepNumeric() {\n return this.step > 0 ? parseFloat(this.step) : 0;\n },\n\n inputWidth() {\n const value = (this.roundValue(this.internalValue) - this.minValue) / (this.maxValue - this.minValue) * 100;\n return value;\n },\n\n trackFillStyles() {\n const startDir = this.vertical ? 'bottom' : 'left';\n const endDir = this.vertical ? 'top' : 'right';\n const valueDir = this.vertical ? 'height' : 'width';\n const start = this.$vuetify.rtl ? 'auto' : '0';\n const end = this.$vuetify.rtl ? '0' : 'auto';\n const value = this.disabled ? `calc(${this.inputWidth}% - 10px)` : `${this.inputWidth}%`;\n return {\n transition: this.trackTransition,\n [startDir]: start,\n [endDir]: end,\n [valueDir]: value\n };\n },\n\n trackStyles() {\n const startDir = this.vertical ? this.$vuetify.rtl ? 'bottom' : 'top' : this.$vuetify.rtl ? 'left' : 'right';\n const endDir = this.vertical ? 'height' : 'width';\n const start = '0px';\n const end = this.disabled ? `calc(${100 - this.inputWidth}% - 10px)` : `calc(${100 - this.inputWidth}%)`;\n return {\n transition: this.trackTransition,\n [startDir]: start,\n [endDir]: end\n };\n },\n\n showTicks() {\n return this.tickLabels.length > 0 || !!(!this.disabled && this.stepNumeric && this.ticks);\n },\n\n numTicks() {\n return Math.ceil((this.maxValue - this.minValue) / this.stepNumeric);\n },\n\n showThumbLabel() {\n return !this.disabled && !!(this.thumbLabel || this.$scopedSlots['thumb-label']);\n },\n\n computedTrackColor() {\n if (this.disabled) return undefined;\n if (this.trackColor) return this.trackColor;\n if (this.isDark) return this.validationState;\n return this.validationState || 'primary lighten-3';\n },\n\n computedTrackFillColor() {\n if (this.disabled) return undefined;\n if (this.trackFillColor) return this.trackFillColor;\n return this.validationState || this.computedColor;\n },\n\n computedThumbColor() {\n if (this.thumbColor) return this.thumbColor;\n return this.validationState || this.computedColor;\n }\n\n },\n watch: {\n min(val) {\n const parsed = parseFloat(val);\n parsed > this.internalValue && this.$emit('input', parsed);\n },\n\n max(val) {\n const parsed = parseFloat(val);\n parsed < this.internalValue && this.$emit('input', parsed);\n },\n\n value: {\n handler(v) {\n this.internalValue = v;\n }\n\n }\n },\n\n // If done in as immediate in\n // value watcher, causes issues\n // with vue-test-utils\n beforeMount() {\n this.internalValue = this.value;\n },\n\n mounted() {\n // Without a v-app, iOS does not work with body selectors\n this.app = document.querySelector('[data-app]') || consoleWarn('Missing v-app or a non-body wrapping element with the [data-app] attribute', this);\n },\n\n methods: {\n genDefaultSlot() {\n const children = [this.genLabel()];\n const slider = this.genSlider();\n this.inverseLabel ? children.unshift(slider) : children.push(slider);\n children.push(this.genProgress());\n return children;\n },\n\n genSlider() {\n return this.$createElement('div', {\n class: {\n 'v-slider': true,\n 'v-slider--horizontal': !this.vertical,\n 'v-slider--vertical': this.vertical,\n 'v-slider--focused': this.isFocused,\n 'v-slider--active': this.isActive,\n 'v-slider--disabled': this.disabled,\n 'v-slider--readonly': this.readonly,\n ...this.themeClasses\n },\n directives: [{\n name: 'click-outside',\n value: this.onBlur\n }],\n on: {\n click: this.onSliderClick\n }\n }, this.genChildren());\n },\n\n genChildren() {\n return [this.genInput(), this.genTrackContainer(), this.genSteps(), this.genThumbContainer(this.internalValue, this.inputWidth, this.isActive, this.isFocused, this.onThumbMouseDown, this.onFocus, this.onBlur)];\n },\n\n genInput() {\n return this.$createElement('input', {\n attrs: {\n value: this.internalValue,\n id: this.computedId,\n disabled: this.disabled,\n readonly: true,\n tabindex: -1,\n ...this.$attrs\n }\n });\n },\n\n genTrackContainer() {\n const children = [this.$createElement('div', this.setBackgroundColor(this.computedTrackColor, {\n staticClass: 'v-slider__track-background',\n style: this.trackStyles\n })), this.$createElement('div', this.setBackgroundColor(this.computedTrackFillColor, {\n staticClass: 'v-slider__track-fill',\n style: this.trackFillStyles\n }))];\n return this.$createElement('div', {\n staticClass: 'v-slider__track-container',\n ref: 'track'\n }, children);\n },\n\n genSteps() {\n if (!this.step || !this.showTicks) return null;\n const tickSize = parseFloat(this.tickSize);\n const range = createRange(this.numTicks + 1);\n const direction = this.vertical ? 'bottom' : 'left';\n const offsetDirection = this.vertical ? 'right' : 'top';\n if (this.vertical) range.reverse();\n const ticks = range.map(i => {\n const index = this.$vuetify.rtl ? this.maxValue - i : i;\n const children = [];\n\n if (this.tickLabels[index]) {\n children.push(this.$createElement('div', {\n staticClass: 'v-slider__tick-label'\n }, this.tickLabels[index]));\n }\n\n const width = i * (100 / this.numTicks);\n const filled = this.$vuetify.rtl ? 100 - this.inputWidth < width : width < this.inputWidth;\n return this.$createElement('span', {\n key: i,\n staticClass: 'v-slider__tick',\n class: {\n 'v-slider__tick--filled': filled\n },\n style: {\n width: `${tickSize}px`,\n height: `${tickSize}px`,\n [direction]: `calc(${width}% - ${tickSize / 2}px)`,\n [offsetDirection]: `calc(50% - ${tickSize / 2}px)`\n }\n }, children);\n });\n return this.$createElement('div', {\n staticClass: 'v-slider__ticks-container',\n class: {\n 'v-slider__ticks-container--always-show': this.ticks === 'always' || this.tickLabels.length > 0\n }\n }, ticks);\n },\n\n genThumbContainer(value, valueWidth, isActive, isFocused, onDrag, onFocus, onBlur, ref = 'thumb') {\n const children = [this.genThumb()];\n const thumbLabelContent = this.genThumbLabelContent(value);\n this.showThumbLabel && children.push(this.genThumbLabel(thumbLabelContent));\n return this.$createElement('div', this.setTextColor(this.computedThumbColor, {\n ref,\n staticClass: 'v-slider__thumb-container',\n class: {\n 'v-slider__thumb-container--active': isActive,\n 'v-slider__thumb-container--focused': isFocused,\n 'v-slider__thumb-container--show-label': this.showThumbLabel\n },\n style: this.getThumbContainerStyles(valueWidth),\n attrs: {\n role: 'slider',\n tabindex: this.disabled || this.readonly ? -1 : this.$attrs.tabindex ? this.$attrs.tabindex : 0,\n 'aria-label': this.label,\n 'aria-valuemin': this.min,\n 'aria-valuemax': this.max,\n 'aria-valuenow': this.internalValue,\n 'aria-readonly': String(this.readonly),\n 'aria-orientation': this.vertical ? 'vertical' : 'horizontal',\n ...this.$attrs\n },\n on: {\n focus: onFocus,\n blur: onBlur,\n keydown: this.onKeyDown,\n keyup: this.onKeyUp,\n touchstart: onDrag,\n mousedown: onDrag\n }\n }), children);\n },\n\n genThumbLabelContent(value) {\n return this.$scopedSlots['thumb-label'] ? this.$scopedSlots['thumb-label']({\n value\n }) : [this.$createElement('span', [String(value)])];\n },\n\n genThumbLabel(content) {\n const size = convertToUnit(this.thumbSize);\n const transform = this.vertical ? `translateY(20%) translateY(${Number(this.thumbSize) / 3 - 1}px) translateX(55%) rotate(135deg)` : `translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)`;\n return this.$createElement(VScaleTransition, {\n props: {\n origin: 'bottom center'\n }\n }, [this.$createElement('div', {\n staticClass: 'v-slider__thumb-label-container',\n directives: [{\n name: 'show',\n value: this.isFocused || this.isActive || this.thumbLabel === 'always'\n }]\n }, [this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {\n staticClass: 'v-slider__thumb-label',\n style: {\n height: size,\n width: size,\n transform\n }\n }), [this.$createElement('div', content)])])]);\n },\n\n genThumb() {\n return this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {\n staticClass: 'v-slider__thumb'\n }));\n },\n\n getThumbContainerStyles(width) {\n const direction = this.vertical ? 'top' : 'left';\n let value = this.$vuetify.rtl ? 100 - width : width;\n value = this.vertical ? 100 - value : value;\n return {\n transition: this.trackTransition,\n [direction]: `${value}%`\n };\n },\n\n onThumbMouseDown(e) {\n this.oldValue = this.internalValue;\n this.keyPressed = 2;\n this.isActive = true;\n const mouseUpOptions = passiveSupported ? {\n passive: true,\n capture: true\n } : true;\n const mouseMoveOptions = passiveSupported ? {\n passive: true\n } : false;\n\n if ('touches' in e) {\n this.app.addEventListener('touchmove', this.onMouseMove, mouseMoveOptions);\n addOnceEventListener(this.app, 'touchend', this.onSliderMouseUp, mouseUpOptions);\n } else {\n this.app.addEventListener('mousemove', this.onMouseMove, mouseMoveOptions);\n addOnceEventListener(this.app, 'mouseup', this.onSliderMouseUp, mouseUpOptions);\n }\n\n this.$emit('start', this.internalValue);\n },\n\n onSliderMouseUp(e) {\n e.stopPropagation();\n this.keyPressed = 0;\n const mouseMoveOptions = passiveSupported ? {\n passive: true\n } : false;\n this.app.removeEventListener('touchmove', this.onMouseMove, mouseMoveOptions);\n this.app.removeEventListener('mousemove', this.onMouseMove, mouseMoveOptions);\n this.$emit('end', this.internalValue);\n\n if (!deepEqual(this.oldValue, this.internalValue)) {\n this.$emit('change', this.internalValue);\n this.noClick = true;\n }\n\n this.isActive = false;\n },\n\n onMouseMove(e) {\n const {\n value\n } = this.parseMouseMove(e);\n this.internalValue = value;\n },\n\n onKeyDown(e) {\n if (this.disabled || this.readonly) return;\n const value = this.parseKeyDown(e, this.internalValue);\n if (value == null) return;\n this.internalValue = value;\n this.$emit('change', value);\n },\n\n onKeyUp() {\n this.keyPressed = 0;\n },\n\n onSliderClick(e) {\n if (this.noClick) {\n this.noClick = false;\n return;\n }\n\n const thumb = this.$refs.thumb;\n thumb.focus();\n this.onMouseMove(e);\n this.$emit('change', this.internalValue);\n },\n\n onBlur(e) {\n this.isFocused = false;\n this.$emit('blur', e);\n },\n\n onFocus(e) {\n this.isFocused = true;\n this.$emit('focus', e);\n },\n\n parseMouseMove(e) {\n const start = this.vertical ? 'top' : 'left';\n const length = this.vertical ? 'height' : 'width';\n const click = this.vertical ? 'clientY' : 'clientX';\n const {\n [start]: trackStart,\n [length]: trackLength\n } = this.$refs.track.getBoundingClientRect();\n const clickOffset = 'touches' in e ? e.touches[0][click] : e[click]; // Can we get rid of any here?\n // It is possible for left to be NaN, force to number\n\n let clickPos = Math.min(Math.max((clickOffset - trackStart) / trackLength, 0), 1) || 0;\n if (this.vertical) clickPos = 1 - clickPos;\n if (this.$vuetify.rtl) clickPos = 1 - clickPos;\n const isInsideTrack = clickOffset >= trackStart && clickOffset <= trackStart + trackLength;\n const value = parseFloat(this.min) + clickPos * (this.maxValue - this.minValue);\n return {\n value,\n isInsideTrack\n };\n },\n\n parseKeyDown(e, value) {\n if (this.disabled) return;\n const {\n pageup,\n pagedown,\n end,\n home,\n left,\n right,\n down,\n up\n } = keyCodes;\n if (![pageup, pagedown, end, home, left, right, down, up].includes(e.keyCode)) return;\n e.preventDefault();\n const step = this.stepNumeric || 1;\n const steps = (this.maxValue - this.minValue) / step;\n\n if ([left, right, down, up].includes(e.keyCode)) {\n this.keyPressed += 1;\n const increase = this.$vuetify.rtl ? [left, up] : [right, up];\n const direction = increase.includes(e.keyCode) ? 1 : -1;\n const multiplier = e.shiftKey ? 3 : e.ctrlKey ? 2 : 1;\n value = value + direction * step * multiplier;\n } else if (e.keyCode === home) {\n value = this.minValue;\n } else if (e.keyCode === end) {\n value = this.maxValue;\n } else {\n const direction = e.keyCode === pagedown ? 1 : -1;\n value = value - direction * step * (steps > 100 ? steps / 10 : 10);\n }\n\n return value;\n },\n\n roundValue(value) {\n if (!this.stepNumeric) return value; // Format input value using the same number\n // of decimals places as in the step prop\n\n const trimmedStep = this.step.toString().trim();\n const decimals = trimmedStep.indexOf('.') > -1 ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;\n const offset = this.minValue % this.stepNumeric;\n const newValue = Math.round((value - offset) / this.stepNumeric) * this.stepNumeric + offset;\n return parseFloat(Math.min(newValue, this.maxValue).toFixed(decimals));\n }\n\n }\n});\n//# sourceMappingURL=VSlider.js.map"],"sourceRoot":""} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js b/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js deleted file mode 100644 index 69fe69416..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js +++ /dev/null @@ -1,2 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-20681be8"],{"8adc":function(t,e,i){},cc20:function(t,e,i){"use strict";i("8adc");var s=i("58df"),a=i("0789"),l=i("9d26"),o=i("a9ad"),c=i("4e82"),n=i("7560"),h=i("f2e7"),r=i("1c87"),p=i("af2b"),d=i("d9bd");e["a"]=Object(s["a"])(o["a"],p["a"],r["a"],n["a"],Object(c["a"])("chipGroup"),Object(h["b"])("inputValue")).extend({name:"v-chip",props:{active:{type:Boolean,default:!0},activeClass:{type:String,default(){return this.chipGroup?this.chipGroup.activeClass:""}},close:Boolean,closeIcon:{type:String,default:"$delete"},disabled:Boolean,draggable:Boolean,filter:Boolean,filterIcon:{type:String,default:"$complete"},label:Boolean,link:Boolean,outlined:Boolean,pill:Boolean,tag:{type:String,default:"span"},textColor:String,value:null},data:()=>({proxyClass:"v-chip--active"}),computed:{classes(){return{"v-chip":!0,...r["a"].options.computed.classes.call(this),"v-chip--clickable":this.isClickable,"v-chip--disabled":this.disabled,"v-chip--draggable":this.draggable,"v-chip--label":this.label,"v-chip--link":this.isLink,"v-chip--no-color":!this.color,"v-chip--outlined":this.outlined,"v-chip--pill":this.pill,"v-chip--removable":this.hasClose,...this.themeClasses,...this.sizeableClasses,...this.groupClasses}},hasClose(){return Boolean(this.close)},isClickable(){return Boolean(r["a"].options.computed.isClickable.call(this)||this.chipGroup)}},created(){const t=[["outline","outlined"],["selected","input-value"],["value","active"],["@input","@active.sync"]];t.forEach(([t,e])=>{this.$attrs.hasOwnProperty(t)&&Object(d["a"])(t,e,this)})},methods:{click(t){this.$emit("click",t),this.chipGroup&&this.toggle()},genFilter(){const t=[];return this.isActive&&t.push(this.$createElement(l["a"],{staticClass:"v-chip__filter",props:{left:!0}},this.filterIcon)),this.$createElement(a["b"],t)},genClose(){return this.$createElement(l["a"],{staticClass:"v-chip__close",props:{right:!0},on:{click:t=>{t.stopPropagation(),this.$emit("click:close"),this.$emit("update:active",!1)}}},this.closeIcon)},genContent(){return this.$createElement("span",{staticClass:"v-chip__content"},[this.filter&&this.genFilter(),this.$slots.default,this.hasClose&&this.genClose()])}},render(t){const e=[this.genContent()];let{tag:i,data:s}=this.generateRouteLink();s.attrs={...s.attrs,draggable:this.draggable?"true":void 0,tabindex:this.chipGroup&&!this.disabled?0:s.attrs.tabindex},s.directives.push({name:"show",value:this.active}),s=this.setBackgroundColor(this.color,s);const a=this.textColor||this.outlined&&this.color;return t(i,this.setTextColor(a,s),e)}})}}]); -//# sourceMappingURL=chunk-20681be8.c913200b.js.map \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js.map b/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js.map deleted file mode 100644 index 9d38051dc..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-20681be8.c913200b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/vuetify/lib/components/VChip/VChip.js"],"names":["extend","name","props","active","type","Boolean","default","activeClass","String","this","chipGroup","close","closeIcon","disabled","draggable","filter","filterIcon","label","link","outlined","pill","tag","textColor","value","data","proxyClass","computed","options","classes","call","isClickable","isLink","color","hasClose","themeClasses","sizeableClasses","groupClasses","breakingProps","forEach","original","replacement","$attrs","hasOwnProperty","methods","e","$emit","toggle","children","isActive","push","$createElement","staticClass","left","right","on","click","stopPropagation","genFilter","$slots","genClose","h","genContent","generateRouteLink","attrs","undefined","tabindex","directives","setBackgroundColor","setTextColor"],"mappings":"yIAAA,sIAiBe,sBAAO,OAAW,OAAU,OAAU,OAAW,eAAiB,aAAc,eAAkB,eAAeA,OAAO,CACrIC,KAAM,SACNC,MAAO,CACLC,OAAQ,CACNC,KAAMC,QACNC,SAAS,GAEXC,YAAa,CACXH,KAAMI,OAEN,UACE,OAAKC,KAAKC,UACHD,KAAKC,UAAUH,YADM,KAKhCI,MAAON,QACPO,UAAW,CACTR,KAAMI,OACNF,QAAS,WAEXO,SAAUR,QACVS,UAAWT,QACXU,OAAQV,QACRW,WAAY,CACVZ,KAAMI,OACNF,QAAS,aAEXW,MAAOZ,QACPa,KAAMb,QACNc,SAAUd,QACVe,KAAMf,QACNgB,IAAK,CACHjB,KAAMI,OACNF,QAAS,QAEXgB,UAAWd,OACXe,MAAO,MAETC,KAAM,KAAM,CACVC,WAAY,mBAEdC,SAAU,CACR,UACE,MAAO,CACL,UAAU,KACP,OAASC,QAAQD,SAASE,QAAQC,KAAKpB,MAC1C,oBAAqBA,KAAKqB,YAC1B,mBAAoBrB,KAAKI,SACzB,oBAAqBJ,KAAKK,UAC1B,gBAAiBL,KAAKQ,MACtB,eAAgBR,KAAKsB,OACrB,oBAAqBtB,KAAKuB,MAC1B,mBAAoBvB,KAAKU,SACzB,eAAgBV,KAAKW,KACrB,oBAAqBX,KAAKwB,YACvBxB,KAAKyB,gBACLzB,KAAK0B,mBACL1B,KAAK2B,eAIZ,WACE,OAAO/B,QAAQI,KAAKE,QAGtB,cACE,OAAON,QAAQ,OAASsB,QAAQD,SAASI,YAAYD,KAAKpB,OAASA,KAAKC,aAK5E,UACE,MAAM2B,EAAgB,CAAC,CAAC,UAAW,YAAa,CAAC,WAAY,eAAgB,CAAC,QAAS,UAAW,CAAC,SAAU,iBAG7GA,EAAcC,QAAQ,EAAEC,EAAUC,MAC5B/B,KAAKgC,OAAOC,eAAeH,IAAW,eAASA,EAAUC,EAAa/B,SAI9EkC,QAAS,CACP,MAAMC,GACJnC,KAAKoC,MAAM,QAASD,GACpBnC,KAAKC,WAAaD,KAAKqC,UAGzB,YACE,MAAMC,EAAW,GAWjB,OATItC,KAAKuC,UACPD,EAASE,KAAKxC,KAAKyC,eAAe,OAAO,CACvCC,YAAa,iBACbjD,MAAO,CACLkD,MAAM,IAEP3C,KAAKO,aAGHP,KAAKyC,eAAe,OAAoBH,IAGjD,WACE,OAAOtC,KAAKyC,eAAe,OAAO,CAChCC,YAAa,gBACbjD,MAAO,CACLmD,OAAO,GAETC,GAAI,CACFC,MAAOX,IACLA,EAAEY,kBACF/C,KAAKoC,MAAM,eACXpC,KAAKoC,MAAM,iBAAiB,MAG/BpC,KAAKG,YAGV,aACE,OAAOH,KAAKyC,eAAe,OAAQ,CACjCC,YAAa,mBACZ,CAAC1C,KAAKM,QAAUN,KAAKgD,YAAahD,KAAKiD,OAAOpD,QAASG,KAAKwB,UAAYxB,KAAKkD,eAKpF,OAAOC,GACL,MAAMb,EAAW,CAACtC,KAAKoD,cACvB,IAAI,IACFxC,EAAG,KACHG,GACEf,KAAKqD,oBACTtC,EAAKuC,MAAQ,IAAKvC,EAAKuC,MACrBjD,UAAWL,KAAKK,UAAY,YAASkD,EACrCC,SAAUxD,KAAKC,YAAcD,KAAKI,SAAW,EAAIW,EAAKuC,MAAME,UAE9DzC,EAAK0C,WAAWjB,KAAK,CACnBhD,KAAM,OACNsB,MAAOd,KAAKN,SAEdqB,EAAOf,KAAK0D,mBAAmB1D,KAAKuB,MAAOR,GAC3C,MAAMQ,EAAQvB,KAAKa,WAAab,KAAKU,UAAYV,KAAKuB,MACtD,OAAO4B,EAAEvC,EAAKZ,KAAK2D,aAAapC,EAAOR,GAAOuB","file":"js/chunk-20681be8.c913200b.js","sourcesContent":["// Styles\nimport \"../../../src/components/VChip/VChip.sass\";\nimport mixins from '../../util/mixins'; // Components\n\nimport { VExpandXTransition } from '../transitions';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport { factory as GroupableFactory } from '../../mixins/groupable';\nimport Themeable from '../../mixins/themeable';\nimport { factory as ToggleableFactory } from '../../mixins/toggleable';\nimport Routable from '../../mixins/routable';\nimport Sizeable from '../../mixins/sizeable'; // Utilities\n\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(Colorable, Sizeable, Routable, Themeable, GroupableFactory('chipGroup'), ToggleableFactory('inputValue')).extend({\n name: 'v-chip',\n props: {\n active: {\n type: Boolean,\n default: true\n },\n activeClass: {\n type: String,\n\n default() {\n if (!this.chipGroup) return '';\n return this.chipGroup.activeClass;\n }\n\n },\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete'\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete'\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span'\n },\n textColor: String,\n value: null\n },\n data: () => ({\n proxyClass: 'v-chip--active'\n }),\n computed: {\n classes() {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses\n };\n },\n\n hasClose() {\n return Boolean(this.close);\n },\n\n isClickable() {\n return Boolean(Routable.options.computed.isClickable.call(this) || this.chipGroup);\n }\n\n },\n\n created() {\n const breakingProps = [['outline', 'outlined'], ['selected', 'input-value'], ['value', 'active'], ['@input', '@active.sync']];\n /* istanbul ignore next */\n\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this);\n });\n },\n\n methods: {\n click(e) {\n this.$emit('click', e);\n this.chipGroup && this.toggle();\n },\n\n genFilter() {\n const children = [];\n\n if (this.isActive) {\n children.push(this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: {\n left: true\n }\n }, this.filterIcon));\n }\n\n return this.$createElement(VExpandXTransition, children);\n },\n\n genClose() {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true\n },\n on: {\n click: e => {\n e.stopPropagation();\n this.$emit('click:close');\n this.$emit('update:active', false);\n }\n }\n }, this.closeIcon);\n },\n\n genContent() {\n return this.$createElement('span', {\n staticClass: 'v-chip__content'\n }, [this.filter && this.genFilter(), this.$slots.default, this.hasClose && this.genClose()]);\n }\n\n },\n\n render(h) {\n const children = [this.genContent()];\n let {\n tag,\n data\n } = this.generateRouteLink();\n data.attrs = { ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs.tabindex\n };\n data.directives.push({\n name: 'show',\n value: this.active\n });\n data = this.setBackgroundColor(this.color, data);\n const color = this.textColor || this.outlined && this.color;\n return h(tag, this.setTextColor(color, data), children);\n }\n\n});\n//# sourceMappingURL=VChip.js.map"],"sourceRoot":""} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js b/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js deleted file mode 100644 index e7700a3b5..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js +++ /dev/null @@ -1,2 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c7972"],{"50ef":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("CVslider",{attrs:{name:"Exposure",min:0,max:100},on:{input:function(t){return e.handleData("exposure")}},model:{value:e.value.exposure,callback:function(t){e.$set(e.value,"exposure",t)},expression:"value.exposure"}}),a("CVslider",{attrs:{name:"Brightness",min:0,max:100},on:{input:function(t){return e.handleData("brightness")}},model:{value:e.value.brightness,callback:function(t){e.$set(e.value,"brightness",t)},expression:"value.brightness"}}),-1!==e.value.gain?a("CVslider",{attrs:{name:"Gain",min:0,max:100},on:{input:function(t){return e.handleData("gain")}},model:{value:e.value.gain,callback:function(t){e.$set(e.value,"gain",t)},expression:"value.gain"}}):e._e(),a("CVselect",{attrs:{name:"Orientation",list:["Normal","90° CW","180°","90° CCW"]},on:{input:function(t){return e.handleData("rotationMode")}},model:{value:e.value.rotationMode,callback:function(t){e.$set(e.value,"rotationMode",t)},expression:"value.rotationMode"}}),a("CVselect",{attrs:{name:"Resolution",list:e.resolutionList},on:{input:function(t){return e.handleData("videoModeIndex")}},model:{value:e.value.videoModeIndex,callback:function(t){e.$set(e.value,"videoModeIndex",t)},expression:"value.videoModeIndex"}}),a("CVselect",{attrs:{name:"Stream Resolution",list:e.streamResolutionList},on:{input:function(t){return e.handleData("streamDivisor")}},model:{value:e.value.streamDivisor,callback:function(t){e.$set(e.value,"streamDivisor",t)},expression:"value.streamDivisor"}})],1)},o=[],i=a("1447"),s=a("8384"),l={name:"Input",props:["value"],components:{CVslider:i["a"],CVselect:s["a"]},methods:{handleData(e){this.handleInput(e,this.value[e]),this.$emit("update")}},data(){return{t:0,a:1}},computed:{resolutionList:{get(){let e=[];for(let t of this.$store.state.resolutionList)e.push(`${t["width"]} X ${t["height"]} at ${t["fps"]} FPS, ${t["pixelFormat"]}`);return e}},streamResolutionList:{get(){let e=this.$store.state.resolutionList[this.value.videoModeIndex],t=[];t.push(`${Math.floor(e["width"])} X ${Math.floor(e["height"])}`);for(let a=2;a<=6;a+=2)t.push(`${Math.floor(e["width"]/a)} X ${Math.floor(e["height"]/a)}`);return t}}}},u=l,r=a("2877"),d=Object(r["a"])(u,n,o,!1,null,"cb80c2b0",null);t["default"]=d.exports}}]); -//# sourceMappingURL=chunk-2d0c7972.adbbf5d7.js.map \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js.map b/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js.map deleted file mode 100644 index 077068aea..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-2d0c7972.adbbf5d7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/views/CameraViewes/InputTab.vue?b682","webpack:///src/views/CameraViewes/InputTab.vue","webpack:///./src/views/CameraViewes/InputTab.vue?3867","webpack:///./src/views/CameraViewes/InputTab.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","on","$event","handleData","model","value","callback","$$v","$set","expression","gain","_e","resolutionList","streamResolutionList","staticRenderFns","component"],"mappings":"yHAAA,IAAIA,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,WAAW,IAAM,EAAE,IAAM,KAAKC,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,cAAcC,MAAM,CAACC,MAAOX,EAAIW,MAAc,SAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,WAAYE,IAAME,WAAW,oBAAoBX,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,aAAa,IAAM,EAAE,IAAM,KAAKC,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,gBAAgBC,MAAM,CAACC,MAAOX,EAAIW,MAAgB,WAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,aAAcE,IAAME,WAAW,uBAA2C,IAApBf,EAAIW,MAAMK,KAAaZ,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,OAAO,IAAM,EAAE,IAAM,KAAKC,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,UAAUC,MAAM,CAACC,MAAOX,EAAIW,MAAU,KAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,OAAQE,IAAME,WAAW,gBAAgBf,EAAIiB,KAAKb,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,cAAc,KAAO,CAAC,SAAS,SAAS,OAAO,YAAYC,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,kBAAkBC,MAAM,CAACC,MAAOX,EAAIW,MAAkB,aAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,eAAgBE,IAAME,WAAW,wBAAwBX,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,aAAa,KAAON,EAAIkB,gBAAgBX,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,oBAAoBC,MAAM,CAACC,MAAOX,EAAIW,MAAoB,eAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,iBAAkBE,IAAME,WAAW,0BAA0BX,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,oBAAoB,KAAON,EAAImB,sBAAsBZ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOR,EAAIS,WAAW,mBAAmBC,MAAM,CAACC,MAAOX,EAAIW,MAAmB,cAAEC,SAAS,SAAUC,GAAMb,EAAIc,KAAKd,EAAIW,MAAO,gBAAiBE,IAAME,WAAW,0BAA0B,IAChuDK,EAAkB,G,wBCkBtB,GACI,KAAJ,QACI,MAAJ,UACI,WAAJ,CACQ,gBACA,iBAEJ,QAAJ,CACQ,WAAR,GACY,KAAZ,6BACY,KAAZ,kBAGI,OACI,MAAR,CACY,EAAZ,EACY,EAAZ,IAGI,SAAJ,CACQ,eAAR,CACY,MACI,IAAhB,KACgB,IAAhB,0CACoB,EAApB,+EAEgB,OAAhB,IAGQ,qBAAR,CACY,MACI,IAAhB,8DACA,KACgB,EAAhB,+DACgB,IAAhB,kBACoB,EAApB,mEAEgB,OAAhB,MCxDqQ,I,YCOjQC,EAAY,eACd,EACAtB,EACAqB,GACA,EACA,KACA,WACA,MAIa,aAAAC,E","file":"js/chunk-2d0c7972.adbbf5d7.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('CVslider',{attrs:{\"name\":\"Exposure\",\"min\":0,\"max\":100},on:{\"input\":function($event){return _vm.handleData('exposure')}},model:{value:(_vm.value.exposure),callback:function ($$v) {_vm.$set(_vm.value, \"exposure\", $$v)},expression:\"value.exposure\"}}),_c('CVslider',{attrs:{\"name\":\"Brightness\",\"min\":0,\"max\":100},on:{\"input\":function($event){return _vm.handleData('brightness')}},model:{value:(_vm.value.brightness),callback:function ($$v) {_vm.$set(_vm.value, \"brightness\", $$v)},expression:\"value.brightness\"}}),(_vm.value.gain !== -1)?_c('CVslider',{attrs:{\"name\":\"Gain\",\"min\":0,\"max\":100},on:{\"input\":function($event){return _vm.handleData('gain')}},model:{value:(_vm.value.gain),callback:function ($$v) {_vm.$set(_vm.value, \"gain\", $$v)},expression:\"value.gain\"}}):_vm._e(),_c('CVselect',{attrs:{\"name\":\"Orientation\",\"list\":['Normal','90° CW','180°','90° CCW']},on:{\"input\":function($event){return _vm.handleData('rotationMode')}},model:{value:(_vm.value.rotationMode),callback:function ($$v) {_vm.$set(_vm.value, \"rotationMode\", $$v)},expression:\"value.rotationMode\"}}),_c('CVselect',{attrs:{\"name\":\"Resolution\",\"list\":_vm.resolutionList},on:{\"input\":function($event){return _vm.handleData('videoModeIndex')}},model:{value:(_vm.value.videoModeIndex),callback:function ($$v) {_vm.$set(_vm.value, \"videoModeIndex\", $$v)},expression:\"value.videoModeIndex\"}}),_c('CVselect',{attrs:{\"name\":\"Stream Resolution\",\"list\":_vm.streamResolutionList},on:{\"input\":function($event){return _vm.handleData('streamDivisor')}},model:{value:(_vm.value.streamDivisor),callback:function ($$v) {_vm.$set(_vm.value, \"streamDivisor\", $$v)},expression:\"value.streamDivisor\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InputTab.vue?vue&type=template&id=cb80c2b0&scoped=true&\"\nimport script from \"./InputTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InputTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cb80c2b0\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/chameleon-server/src/main/resources/web/js/chunk-369f5d2c.8e3b6396.js b/chameleon-server/src/main/resources/web/js/chunk-369f5d2c.8e3b6396.js deleted file mode 100644 index c79dfccf9..000000000 --- a/chameleon-server/src/main/resources/web/js/chunk-369f5d2c.8e3b6396.js +++ /dev/null @@ -1,2 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-369f5d2c","chunk-20681be8"],{"0bc6":function(t,e,i){},"16b7":function(t,e,i){"use strict";var s=i("2b0e");e["a"]=s["a"].extend().extend({name:"delayable",props:{openDelay:{type:[Number,String],default:0},closeDelay:{type:[Number,String],default:0}},data:()=>({openTimeout:void 0,closeTimeout:void 0}),methods:{clearDelay(){clearTimeout(this.openTimeout),clearTimeout(this.closeTimeout)},runDelay(t,e){this.clearDelay();const i=parseInt(this[`${t}Delay`],10);this[`${t}Timeout`]=setTimeout(e||(()=>{this.isActive={open:!0,close:!1}[t]}),i)}}})},1800:function(t,e,i){"use strict";var s=i("2b0e");e["a"]=s["a"].extend({name:"v-list-item-action",functional:!0,render(t,{data:e,children:i=[]}){e.staticClass=e.staticClass?`v-list-item__action ${e.staticClass}`:"v-list-item__action";const s=i.filter(t=>!1===t.isComment&&" "!==t.text);return s.length>1&&(e.staticClass+=" v-list-item__action--stack"),t("div",e,i)}})},"21be":function(t,e,i){"use strict";var s=i("2b0e"),n=i("80d2");e["a"]=s["a"].extend().extend({name:"stackable",data(){return{stackElement:null,stackExclude:null,stackMinZIndex:0,isActive:!1}},computed:{activeZIndex(){if("undefined"===typeof window)return 0;const t=this.stackElement||this.$refs.content,e=this.isActive?this.getMaxZIndex(this.stackExclude||[t])+2:Object(n["p"])(t);return null==e?e:parseInt(e)}},methods:{getMaxZIndex(t=[]){const e=this.$el,i=[this.stackMinZIndex,Object(n["p"])(e)],s=[...document.getElementsByClassName("v-menu__content--active"),...document.getElementsByClassName("v-dialog__content--active")];for(let a=0;a!t.isComment&&" "!==t.text)}})},"4ad4":function(t,e,i){"use strict";var s=i("16b7"),n=i("f2e7"),a=i("58df"),o=i("80d2"),l=i("d9bd");const r=Object(a["a"])(s["a"],n["a"]);e["a"]=r.extend({name:"activatable",props:{activator:{default:null,validator:t=>["string","object"].includes(typeof t)},disabled:Boolean,internalActivator:Boolean,openOnHover:Boolean},data:()=>({activatorElement:null,activatorNode:[],events:["click","mouseenter","mouseleave"],listeners:{}}),watch:{activator:"resetActivator",openOnHover:"resetActivator"},mounted(){const t=Object(o["o"])(this,"activator",!0);t&&["v-slot","normal"].includes(t)&&Object(l["b"])('The activator slot must be bound, try \'