diff --git a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
index 84cc291baadd88e21052eb568d5b9c1c028742fe..945e527072bb8190e2838d56348e143bde62e529 100755
--- a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
+++ b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
@@ -226,7 +226,13 @@ function manage_form($arr_id, $history, $id_action, $label_action, $status, $col
                 $attachmentToFreeze = IParapheurController::sendDatas(['config' => $config, 'resIdMaster' => $res_id]);
             } elseif ($config['id'] == 'fastParapheur') {
                 include_once 'modules/visa/class/FastParapheurController.php';
-                $attachmentToFreeze = FastParapheurController::sendDatas(['config' => $config, 'resIdMaster' => $res_id]);
+                $sendedInfo = FastParapheurController::sendDatas(['config' => $config, 'resIdMaster' => $res_id]);
+                if (!empty($sendedInfo['error'])) {
+                    var_dump($sendedInfo['error']);
+                    exit;
+                } else {
+                    $attachmentToFreeze = $sendedInfo['sended'];
+                }
             } elseif ($config['id'] == 'maarchParapheur') {
                 $listinstances = \Entity\models\ListInstanceModel::getVisaCircuitByResId(['select' => ['external_id', 'users.user_id', 'requested_signature'], 'id' => $res_id]);
                 if (empty($listinstances)) {
diff --git a/apps/maarch_entreprise/cas_connect.php b/apps/maarch_entreprise/cas_connect.php
index 938b07cb893edc590232af90cd7c7a0362af77b1..d6848fd399913545590b90f24adf9002ac30e843 100755
--- a/apps/maarch_entreprise/cas_connect.php
+++ b/apps/maarch_entreprise/cas_connect.php
@@ -121,7 +121,7 @@ $trace->add(
     _CONNECTION_CAS_OK,
     $_SESSION['config']['databasetype'],
     "ADMIN",
-    false
+    false, 'ok', 'DEBUG', $userId
 );
 
 exit();
diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php
index 22cbbe93e2f21ab6a446cb3a01cc0f79677f0f27..2d28ae6673364670e547f8c6ed866789574ec7df 100755
--- a/apps/maarch_entreprise/lang/fr.php
+++ b/apps/maarch_entreprise/lang/fr.php
@@ -1460,7 +1460,7 @@ if (!defined('_ADD_ATTACHMENT_OR_NOTE')) {
     define('_ADD_ATTACHMENT_OR_NOTE', 'Ajoutez une pièce jointe ou une annotation pour ce(s) courrier(s)');
 }
 if (!defined('_CLOSE_MAIL_WITH_ATTACHMENT')) {
-    define('_CLOSE_MAIL_WITH_ATTACHMENT', 'Clôturer un courrier avec pièce jointe');
+    define('_CLOSE_MAIL_WITH_ATTACHMENT', 'Clôturer un courrier avec pièce jointe ou annotation');
 }
 // if (!defined('_CLOSE_MAIL_WITH_ATTACHMENT_DESC')) {
 //     define('_CLOSE_MAIL_WITH_ATTACHMENT_DESC', "Permet de mettre à jour la date de clôture d'un courrier ('closing_date' de la table res_letterbox) avec présence OBLIGATOIRE de pièce(s) jointe(s) / annotation(s).");
@@ -4028,9 +4028,6 @@ if (!defined('_REDIRECT_WORKFLOW_ENTITY_DESC')) {
 if (!defined('_VISA_MAIL')) {
     define('_VISA_MAIL', 'Viser le courrier');
 }
-if (!defined('_VISA_MAIL_DESC')) {
-    define('_VISA_MAIL_DESC', 'Ouvre la page du parapheur afin de pouvoir viser / signer le document.');
-}
 if (!defined('_PREPARE_VISA')) {
     define('_PREPARE_VISA', 'Préparer le circuit de visa');
 }
diff --git a/apps/maarch_entreprise/lang/nl.php b/apps/maarch_entreprise/lang/nl.php
index 425718895ca09c768c032a2f6e65fd2a3186025f..a6cce23424953a2a1615aa5bbb90a085712c8be1 100755
--- a/apps/maarch_entreprise/lang/nl.php
+++ b/apps/maarch_entreprise/lang/nl.php
@@ -1287,7 +1287,6 @@ if (!defined('_RESET_VISA_WORKFLOW_DESC')) { define('_RESET_VISA_WORKFLOW_DESC',
 if (!defined('_REJECTION_WORKFLOW_PREVIOUS')) { define('_REJECTION_WORKFLOW_PREVIOUS', 'De goedkeuring weigeren - terug naar de vorige goedkeurder');}
 if (!defined('_REJECTION_WORKFLOW_PREVIOUS_DESC')) { define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Reset de datum van de vorige goedkeurder die in het goedkeuringscircuit van het brief aanwezig is (process_date van de tabel listinstance).');}
 if (!defined('_VISA_MAIL')) { define('_VISA_MAIL', 'De e-mail goedkeuren');}
-if (!defined('_VISA_MAIL_DESC')) { define('_VISA_MAIL_DESC', 'Opent de pagina van de parafeerder om het document te kunnen goedkeuren / ondertekenen.');}
 if (!defined('_PREPARE_VISA')) { define('_PREPARE_VISA', 'Het goedkeuringscircuit voorbereiden');}
 if (!defined('_SEND_TO_VISA')) { define('_SEND_TO_VISA', 'Versturen voor goedkeuring');}
 if (!defined('_SEND_TO_VISA_DESC')) { define('_SEND_TO_VISA_DESC', 'Controleert of er een goedkeuringscircuit is geconfigureerd EN of er één of meerdere antwoordprojecten aan het brief gekoppeld zijn.');}
diff --git a/apps/maarch_entreprise/log.php b/apps/maarch_entreprise/log.php
index 48aa5afb66a7cf9336048ac2e4c097331cb23817..d3bdd15333a4491da0363508d6bbf6e0dcccee16 100755
--- a/apps/maarch_entreprise/log.php
+++ b/apps/maarch_entreprise/log.php
@@ -65,6 +65,7 @@ if (isset($_SESSION['web_cas_url'])) {
 } elseif (!empty($_SESSION['sso']['userId'])) {
     $login = $_SESSION['sso']['userId'];
     $_REQUEST['pass'] = 'maarch';
+    $method = 'sso';
 } elseif (isset($_REQUEST['login'])) {
     $login = $func->wash($_REQUEST['login'], 'no', _THE_ID, 'yes');
 } else {
diff --git a/apps/maarch_entreprise/ozwilloConnect.php b/apps/maarch_entreprise/ozwilloConnect.php
index 40e87de79e33c2cbb350ce5bbd185271a00796d4..88b256dea37433314d97fbac5d1ff2ff9d3056bd 100755
--- a/apps/maarch_entreprise/ozwilloConnect.php
+++ b/apps/maarch_entreprise/ozwilloConnect.php
@@ -50,4 +50,4 @@ unset($_REQUEST['state']);
 
 header("location: log.php");
 $trace = new history();
-$trace->add('users', $idToken->sub, 'LOGIN', 'userlogin', 'Ozwillo Connection', $_SESSION['config']['databasetype'], 'ADMIN', false);
+$trace->add('users', $idToken->sub, 'LOGIN', 'userlogin', 'Ozwillo Connection', $_SESSION['config']['databasetype'], 'ADMIN', false, 'ok', 'DEBUG', $_SESSION['ozwillo']['userId']);
diff --git a/bin/external/localeo/LocaleoScript.php b/bin/external/localeo/LocaleoScript.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbf8755df56ad834e14726ab81f41cc875e9282b
--- /dev/null
+++ b/bin/external/localeo/LocaleoScript.php
@@ -0,0 +1,320 @@
+<?php
+
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
+ *
+ */
+
+/**
+ * @brief Localeo Script
+ * @author dev@maarch.org
+ */
+
+chdir('../../..');
+
+require 'vendor/autoload.php';
+
+LocaleoScript::sendContact($argv);
+LocaleoScript::updateContact($argv);
+
+class LocaleoScript
+{
+    const MAPPING_CONTACT = [
+        'civility'          => 'civility',
+        'company'           => 'company',
+        'firstname'         => 'firstname',
+        'familyName'        => 'lastname',
+        'email'             => 'email',
+        'phone'             => 'phone',
+        'num'               => 'address_number',
+        'street'            => 'address_street',
+        'ZC'                => 'address_postcode',
+        'additionalAddress' => 'address_additional1',
+        'city'              => 'address_town',
+        'country'           => 'address_country',
+        'externalId'        => 'id'
+    ];
+
+    public static function sendContact(array $args)
+    {
+        $customId = null;
+        if (!empty($args[1]) && $args[1] == '--customId' && !empty($args[2])) {
+            $customId = $args[2];
+        }
+
+        $configuration = LocaleoScript::getXmlLoaded(['path' => 'bin/external/localeo/config.xml', 'customId' => $customId]);
+        if (empty($configuration)) {
+            self::writeLog(['message' => "[SEND_CONTACT] File bin/external/localeo/config.xml does not exist"]);
+            exit();
+        } elseif (empty($configuration->apiKey) || empty($configuration->appName) || empty($configuration->sendContact)) {
+            self::writeLog(['message' => "[SEND_CONTACT] File bin/external/localeo/config.xml is not filled enough"]);
+            return;
+        }
+        if ((string)$configuration->sendContact->enabled == 'false') {
+            return;
+        }
+
+        $apiKey = (string)$configuration->apiKey;
+        $appName = (string)$configuration->appName;
+        $url = (string)$configuration->sendContact->url;
+        if (empty($url)) {
+            self::writeLog(['message' => "[SEND_CONTACT] File bin/external/localeo/config.xml is not filled enough"]);
+            return;
+        }
+
+        $dataToMerge = [];
+        if (!empty($configuration->sendContact->data)) {
+            foreach ($configuration->sendContact->data as $value) {
+                $dataToMerge[(string)$value->key] = (string)$value->value;
+            }
+        }
+
+        \SrcCore\models\DatabasePDO::reset();
+        new \SrcCore\models\DatabasePDO(['customId' => $customId]);
+
+        $contacts = \Contact\models\ContactModel::get([
+            'select'    => ['*'],
+            'where'     => ['enabled = ?', "external_id->>'localeoId' is null"],
+            'data'      => [true]
+        ]);
+
+        foreach ($contacts as $contact) {
+            $body = [];
+            foreach (self::MAPPING_CONTACT as $key => $value) {
+                $body[$key] = $contact[$value] ?? '';
+            }
+            $body = array_merge($body, $dataToMerge);
+
+            $response = \SrcCore\models\CurlModel::execSimple([
+                'url'       => $url,
+                'method'    => 'NO-METHOD',
+                'headers'   => ["Api-Key: {$apiKey}", "appName: {$appName}"],
+                'body'      => ['citoyen' => json_encode($body)],
+                'noLogs'    => true
+            ]);
+
+            if (!empty($response['errors'])) {
+                self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : curl call failed"]);
+                self::writeLog(['message' => $response['errors']]);
+                continue;
+            } elseif (empty($response['response']['id'])) {
+                self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : id is missing"]);
+                self::writeLog(['message' => json_encode($response['response'])]);
+                continue;
+            }
+
+            $externalId = json_decode($contact['external_id'], true);
+            $externalId['localeoId'] = $response['response']['id'];
+            \Contact\models\ContactModel::update(['set' => ['external_id' => json_encode($externalId)], 'where' => ['id = ?'], 'data' => [$contact['id']]]);
+
+            self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : successfully sent to localeo"]);
+        }
+    }
+
+    public static function updateContact(array $args)
+    {
+        $customId = null;
+        if (!empty($args[1]) && $args[1] == '--customId' && !empty($args[2])) {
+            $customId = $args[2];
+        }
+
+        $configuration = LocaleoScript::getXmlLoaded(['path' => 'bin/external/localeo/config.xml', 'customId' => $customId]);
+        if (empty($configuration)) {
+            self::writeLog(['message' => "[UPDATE_CONTACT] File bin/external/localeo/config.xml does not exist"]);
+            exit();
+        } elseif (empty($configuration->apiKey) || empty($configuration->appName) || empty($configuration->updateContact)) {
+            self::writeLog(['message' => "[UPDATE_CONTACT] File bin/external/localeo/config.xml is not filled enough"]);
+            return;
+        }
+        if ((string)$configuration->updateContact->enabled == 'false') {
+            return;
+        }
+
+        $apiKey = (string)$configuration->apiKey;
+        $appName = (string)$configuration->appName;
+        $url = (string)$configuration->updateContact->url;
+        if (empty($url)) {
+            self::writeLog(['message' => "[UPDATE_CONTACT] File bin/external/localeo/config.xml is not filled enough"]);
+            return;
+        }
+
+        $dataToMerge = [];
+        if (!empty($configuration->updateContact->data)) {
+            foreach ($configuration->updateContact->data as $value) {
+                $dataToMerge[(string)$value->key] = (string)$value->value;
+            }
+        }
+
+        \SrcCore\models\DatabasePDO::reset();
+        new \SrcCore\models\DatabasePDO(['customId' => $customId]);
+
+        $where = ['enabled = ?', "external_id->>'localeoId' is not null"];
+        $data = [true];
+        if (file_exists('bin/external/localeo/updateContact.timestamp')) {
+            $time = file_get_contents('bin/external/localeo/updateContact.timestamp');
+            $where[] = 'modification_date > ?';
+            $data[] = date('Y-m-d H:i:s', $time);
+
+        }
+        $file = fopen('bin/external/localeo/updateContact.timestamp', 'w');
+        fwrite($file, time());
+        fclose($file);
+
+        $contacts = \Contact\models\ContactModel::get([
+            'select'    => ['*'],
+            'where'     => $where,
+            'data'      => $data
+        ]);
+
+        foreach ($contacts as $contact) {
+            $externalId = json_decode($contact['external_id'], true);
+
+            $body = [];
+            foreach (self::MAPPING_CONTACT as $key => $value) {
+                $body[$key] = $contact[$value] ?? '';
+            }
+            $body['id'] = $externalId['localeoId'];
+            $body = array_merge($body, $dataToMerge);
+
+            $response = \SrcCore\models\CurlModel::execSimple([
+                'url'       => $url,
+                'method'    => 'NO-METHOD',
+                'headers'   => ["Api-Key: {$apiKey}", "appName: {$appName}"],
+                'body'      => ['citoyen' => json_encode($body)],
+                'noLogs'    => true
+            ]);
+
+            if (!empty($response['errors'])) {
+                self::writeLog(['message' => "[UPDATE_CONTACT] Contact {$contact['id']} : curl call failed"]);
+                self::writeLog(['message' => $response['errors']]);
+                continue;
+            } elseif (empty($response['response']['id'])) {
+                self::writeLog(['message' => "[UPDATE_CONTACT] Contact {$contact['id']} : id is missing"]);
+                self::writeLog(['message' => json_encode($response['response'])]);
+                continue;
+            }
+
+            self::writeLog(['message' => "[UPDATE_CONTACT] Contact {$contact['id']} : successfully sent to localeo"]);
+        }
+    }
+
+//    public static function sendResource(array $args)
+//    {
+//        $customId = null;
+//        if (!empty($args[1]) && $args[1] == '--customId' && !empty($args[2])) {
+//            $customId = $args[2];
+//        }
+//
+//        $configuration = LocaleoScript::getXmlLoaded(['path' => 'bin/external/localeo/config.xml', 'customId' => $customId]);
+//        if (empty($configuration)) {
+//            self::writeLog(['message' => "[SEND_RESOURCE] File bin/external/localeo/config.xml does not exist"]);
+//            exit();
+//        } elseif (empty($configuration->apiKey) || empty($configuration->appName) || empty($configuration->sendResource)) {
+//            self::writeLog(['message' => "[SEND_RESOURCE] File bin/external/localeo/config.xml is not filled enough"]);
+//            return;
+//        }
+//        if ((string)$configuration->sendResource->enabled == 'false') {
+//            return;
+//        }
+//
+//        $apiKey = (string)$configuration->apiKey;
+//        $appName = (string)$configuration->appName;
+//        $url = (string)$configuration->sendResource->url;
+//        if (empty($url)) {
+//            self::writeLog(['message' => "[SEND_RESOURCE] File bin/external/localeo/config.xml is not filled enough"]);
+//            return;
+//        }
+//
+//        $dataToMerge = [];
+//        if (!empty($configuration->sendResource->data)) {
+//            foreach ($configuration->sendResource->data as $value) {
+//                $dataToMerge[(string)$value->key] = (string)$value->value;
+//            }
+//        }
+//
+//        \SrcCore\models\DatabasePDO::reset();
+//        new \SrcCore\models\DatabasePDO(['customId' => $customId]);
+//
+//        $resources = \Resource\models\ResModel::get([
+//            'select'    => ['res_id', 'subject', 'format', 'path', 'filename', 'docserver_id', 'external_id'],
+//            'where'     => ["external_id->>'localeoId' is null"]
+//        ]);
+//
+//        foreach ($resources as $resource) {
+//            if (empty($resource['filename'])) {
+//                self::writeLog(['message' => "[SEND_FILE] Resource {$resource['res_id']} : ({$resource['subject']}) has no file"]);
+//                continue;
+//            }
+//
+//            $docserver = \Docserver\models\DocserverModel::getByDocserverId(['docserverId' => $resource['docserver_id'], 'select' => ['path_template']]);
+//            $file = file_get_contents($docserver['path_template'] . str_replace('#', '/', $resource['path']) . $resource['filename']);
+//            if (empty($file)) {
+//                self::writeLog(['message' => "[SEND_FILE] Resource {$resource['res_id']} : ({$resource['subject']}) file is missing"]);
+//                continue;
+//            }
+//
+//            $encodedFile = base64_encode($file);
+//
+//            if (!empty($config['file'])) {
+//                $docserver = \Docserver\models\DocserverModel::getByDocserverId(['docserverId' => $_SESSION['indexing']['docserver_id'], 'select' => ['path_template']]);
+//                $bodyData[$config['file']] = \SrcCore\models\CurlModel::makeCurlFile(['path' => $docserver['path_template'] . str_replace('#', '/', $_SESSION['indexing']['destination_dir']) . $_SESSION['indexing']['file_destination_name']]);
+//            }
+//
+//            $body = [];
+//            foreach (self::MAPPING_CONTACT as $key => $value) {
+//                $body[$key] = $contact[$value] ?? '';
+//            }
+//            $body = array_merge($body, $dataToMerge);
+//
+//            $response = \SrcCore\models\CurlModel::execSimple([
+//                'url'       => $url,
+//                'method'    => 'NO-METHOD',
+//                'headers'   => ["Api-Key: {$apiKey}", "appName: {$appName}"],
+//                'body'      => [$objectName => json_encode($body)],
+//                'noLogs'    => true
+//            ]);
+//
+//            if (!empty($response['errors'])) {
+//                self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : curl call failed"]);
+//                self::writeLog(['message' => $response['errors']]);
+//                continue;
+//            } elseif (empty($response['response']['id'])) {
+//                self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : id is missing"]);
+//                self::writeLog(['message' => json_encode($response['response'])]);
+//                continue;
+//            }
+//
+//            $externalId = json_decode($contact['external_id'], true);
+//            $externalId['localeoId'] = $response['response']['id'];
+//            \Contact\models\ContactModel::update(['set' => ['external_id' => json_encode($externalId)], 'where' => ['id = ?'], 'data' => [$contact['id']]]);
+//
+//            self::writeLog(['message' => "[SEND_CONTACT] Contact {$contact['id']} : successfully sent to localeo"]);
+//        }
+//    }
+
+    public static function getXmlLoaded(array $args)
+    {
+        if (!empty($args['customId']) && file_exists("custom/{$args['customId']}/{$args['path']}")) {
+            $path = "custom/{$args['customId']}/{$args['path']}";
+        }
+        if (empty($path)) {
+            $path = $args['path'];
+        }
+
+        $xmlfile = null;
+        if (file_exists($path)) {
+            $xmlfile = simplexml_load_file($path);
+        }
+
+        return $xmlfile;
+    }
+
+    public static function writeLog(array $args)
+    {
+        $file = fopen('bin/external/localeo/localeoScript.log', 'a');
+        fwrite($file, '[' . date('Y-m-d H:i:s') . '] ' . $args['message'] . PHP_EOL);
+        fclose($file);
+    }
+}
diff --git a/bin/external/localeo/config.xml b/bin/external/localeo/config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..92bc3cd2a0322e2fa4904a308b31450981110d23
--- /dev/null
+++ b/bin/external/localeo/config.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ROOT>
+    <apiKey></apiKey>
+    <appName></appName>
+    <sendContact>
+        <enabled>false</enabled>
+        <url></url>
+        <data>
+            <key>cityId</key>
+            <value>73</value>
+        </data>
+    </sendContact>
+    <updateContact>
+        <enabled>true</enabled>
+        <url></url>
+        <data>
+            <key>cityId</key>
+            <value>73</value>
+        </data>
+    </updateContact>
+    <sendResource>
+        <enabled>false</enabled>
+        <url></url>
+        <data>
+            <key>cityId</key>
+            <value>73</value>
+        </data>
+        <data>
+            <key>servId</key>
+            <value>4129</value>
+        </data>
+        <data>
+            <key>sqrtId</key>
+            <value>12178</value>
+        </data>
+        <data>
+            <key>qrtId</key>
+            <value>125</value>
+        </data>
+    </sendResource>
+</ROOT>
diff --git a/bin/external/localeo/localeo.sh b/bin/external/localeo/localeo.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a5beb1392a64f89660cbdcd0524dac4a829dd2a1
--- /dev/null
+++ b/bin/external/localeo/localeo.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd /var/www/html/maarch_trunk/bin/external/localeo/
+php LocaleoScript.php --customId
diff --git a/bin/external/ozwillo/OzwilloScript.php b/bin/external/ozwillo/OzwilloScript.php
index e54bc2c3cf9395f845d74c51e9428c3909be7ca5..ba9d954911de39b0dfa8bd526d8924d77988ae7d 100644
--- a/bin/external/ozwillo/OzwilloScript.php
+++ b/bin/external/ozwillo/OzwilloScript.php
@@ -32,14 +32,14 @@ class OzwilloScript
         if (empty($configuration)) {
             self::writeLog(['message' => "[SEND_FILE] File bin/external/ozwillo/config.xml does not exist"]);
             exit();
-        } elseif (empty($configuration->user) || empty($configuration->password) || empty($configuration->uri) || empty($configuration->triggerStatuses->sendFile)) {
+        } elseif (empty($configuration->user) || empty($configuration->password) || empty($configuration->sendFile->uri) || empty($configuration->sendFile->status)) {
             self::writeLog(['message' => "[SEND_FILE] File bin/external/ozwillo/config.xml is not filled enough"]);
-            exit();
+            return;
         }
         $user = (string)$configuration->user;
         $password = (string)$configuration->password;
-        $uri = (string)$configuration->uri;
-        $status = (string)$configuration->triggerStatuses->sendFile;
+        $uri = (string)$configuration->sendFile->uri;
+        $status = (string)$configuration->sendFile->status;
 
         \SrcCore\models\DatabasePDO::reset();
         new \SrcCore\models\DatabasePDO(['customId' => $customId]);
@@ -85,7 +85,7 @@ class OzwilloScript
                 continue;
             } elseif (empty($response['response']['publikId'])) {
                 self::writeLog(['message' => "[SEND_FILE] Resource {$resource['res_id']} : ({$resource['subject']}) publikId is missing"]);
-                self::writeLog(['message' => $response['response']]);
+                self::writeLog(['message' => json_encode($response['response'])]);
                 continue;
             }
 
@@ -108,14 +108,14 @@ class OzwilloScript
         if (empty($configuration)) {
             self::writeLog(['message' => "[SEND_DATA] File bin/external/ozwillo/config.xml does not exist"]);
             exit();
-        } elseif (empty($configuration->user) || empty($configuration->password) || empty($configuration->uri) || empty($configuration->triggerStatuses->sendData)) {
+        } elseif (empty($configuration->user) || empty($configuration->password) || empty($configuration->sendData->uri) || empty($configuration->sendData->status)) {
             self::writeLog(['message' => "[SEND_DATA] File bin/external/ozwillo/config.xml is not filled enough"]);
-            exit();
+            return;
         }
         $user = (string)$configuration->user;
         $password = (string)$configuration->password;
-        $uri = (string)$configuration->uri;
-        $status = (string)$configuration->triggerStatuses->sendData;
+        $uri = (string)$configuration->sendData->uri;
+        $status = (string)$configuration->sendData->status;
 
         \SrcCore\models\DatabasePDO::reset();
         new \SrcCore\models\DatabasePDO(['customId' => $customId]);
diff --git a/bin/external/ozwillo/config.xml b/bin/external/ozwillo/config.xml
index 959ad8388b7e3b8a1a2be28e7a02426e3ec91228..d60b6cd7f6ef55a24e3579ada6f73c87a248fa21 100644
--- a/bin/external/ozwillo/config.xml
+++ b/bin/external/ozwillo/config.xml
@@ -2,9 +2,12 @@
 <ROOT>
     <user>superadmin</user>
     <password>maarch</password>
-    <uri></uri>
-    <triggerStatuses>
-        <sendFile>OZWILLOSF</sendFile>
-        <sendData>OZWILLOSD</sendData>
-    </triggerStatuses>
+    <sendFile>
+        <uri></uri>
+        <status>OZWILLOSF</status>
+    </sendFile>
+    <sendData>
+        <uri></uri>
+        <status>OZWILLOSD</status>
+    </sendData>
 </ROOT>
diff --git a/bin/external/ozwillo/ozwillo.sh b/bin/external/ozwillo/ozwillo.sh
index f2e8bd38662d666024168a9085fb70e1d71712a5..00bacb93988cb012b8deb3d33fa62bd29a41dcb9 100644
--- a/bin/external/ozwillo/ozwillo.sh
+++ b/bin/external/ozwillo/ozwillo.sh
@@ -1,3 +1,3 @@
 #!/bin/sh
 cd /var/www/html/MaarchCourrier/bin/external/ozwillo/
-php OzwilloScript.php --customId
+php OzwilloScript.php --customId monCustom
diff --git a/core/class/class_history.php b/core/class/class_history.php
index 84d722595f16cd35650f5cd8bef504521339a23d..bc5ec4db62a6dacc65d86dd0fd4ebd21b59ce0e7 100755
--- a/core/class/class_history.php
+++ b/core/class/class_history.php
@@ -112,10 +112,13 @@ class history
         }
         $remote_ip = $REMOTE_ADDR;
 
-        $user = '';
+        if (empty($user)) {
+            $user = '';
+        }
         if (isset($_SESSION['user']['UserId'])) {
             $user = $_SESSION['user']['UserId'];
         }
+        \SrcCore\models\ValidatorModel::notEmpty(['user' => $user], ['user']);
 
         $traceInformations = array(
             'WHERE' => $table_name,
diff --git a/core/class/class_security.php b/core/class/class_security.php
index b8e25ac98d2552debd119fa5c485460c7d453b68..e3f275eb497a3f495d42da8863a823e7a53137a4 100755
--- a/core/class/class_security.php
+++ b/core/class/class_security.php
@@ -125,7 +125,7 @@ class security extends Database
         }
 
         $check = \SrcCore\models\AuthenticationModel::authentication(['userId' => $s_login, 'password' => $pass]);
-        if ($check || (in_array($method, ['ldap', 'shibboleth', 'cas']) && $standardConnect == 'false')) {
+        if ($check || (in_array($method, ['ldap', 'shibboleth', 'cas', 'sso']) && $standardConnect == 'false')) {
             $user = $uc->getWithComp($s_login, $comp, $params);
         }
 
diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml
index 4bb476d01aa01d547fa2f2a65078ab380ad56e71..cfa85089cca9bda8213be6f10a018e96f1586e0b 100755
--- a/core/xml/actions_pages.xml
+++ b/core/xml/actions_pages.xml
@@ -199,19 +199,6 @@ An action page is described in a ACTIONPAGE tag :
         <COLLECTIONS>
             <COLL_ID>letterbox_coll</COLL_ID>
         </COLLECTIONS>
-    </ACTIONPAGE>
-	<ACTIONPAGE>
-        <ID>visa_mail</ID>
-        <LABEL>_VISA_MAIL</LABEL>
-        <NAME>visa_mail</NAME>
-        <DESC>_VISA_MAIL_DESC</DESC>
-        <component>signatureBookAction</component>
-        <ORIGIN>module</ORIGIN>
-        <MODULE>visa</MODULE>
-        <FLAG_CREATE>false</FLAG_CREATE>
-        <COLLECTIONS>
-            <COLL_ID>letterbox_coll</COLL_ID>
-        </COLLECTIONS>
     </ACTIONPAGE>
 	<ACTIONPAGE>
         <ID>visa_workflow</ID>
diff --git a/migration/19.04/1904.sql b/migration/19.04/1904.sql
index 514e5e5604846a8907fb2b9776a06fa045ee719a..73a53032aa47af84ae382fe4095788f8c972dfab 100644
--- a/migration/19.04/1904.sql
+++ b/migration/19.04/1904.sql
@@ -38,8 +38,8 @@ DO $$ BEGIN
 
       INSERT INTO redirected_baskets (owner_user_id, actual_user_id, basket_id, group_id) SELECT users.id, us.id, user_abs.basket_id, usergroups.id FROM usergroups, usergroup_content, user_abs, groupbasket, users, users us
         where usergroup_content.group_id = usergroups.group_id
-        and usergroup_content.user_id = user_abs.user_abs
-        and users.user_id = user_abs.user_abs
+        and usergroup_content.user_id = user_abs.basket_owner
+        and users.user_id = user_abs.basket_owner
         and us.user_id = user_abs.new_user
         and groupbasket.group_id = usergroup_content.group_id
         and groupbasket.basket_id = user_abs.basket_id;
diff --git a/migration/20.03/2003.sql b/migration/20.03/2003.sql
index 1b65b6487b715802a1a49235acbc0c26e8e132b1..99efcccfe4f56abccfb8fcc0f71ce8542ba8dcde 100644
--- a/migration/20.03/2003.sql
+++ b/migration/20.03/2003.sql
@@ -83,6 +83,9 @@ where group_id in (
 );
 
 -- /!\ Do not move : update actions AFTER all updates on groupbasket
+DELETE FROM actions_categories WHERE action_id in (SELECT id FROM actions WHERE component = 'viewDoc' OR action_page in ('view', 'validate_mail', 'process', 'visa_mail'));
+DELETE FROM actions_groupbaskets WHERE id_action in (SELECT id FROM actions WHERE component = 'viewDoc' OR action_page in ('view', 'validate_mail', 'process', 'visa_mail'));
+DELETE FROM groupbasket_redirect WHERE action_id in (SELECT id FROM actions WHERE component = 'viewDoc' OR action_page in ('view', 'validate_mail', 'process', 'visa_mail'));
 DELETE FROM actions WHERE component = 'viewDoc' OR action_page in ('view', 'validate_mail', 'process', 'visa_mail');
 
 UPDATE actions SET component = 'rejectVisaBackToPreviousAction' WHERE action_page = 'rejection_visa_previous';
@@ -727,6 +730,8 @@ DO $$ BEGIN
 END$$;
 UPDATE baskets set basket_clause = replace(basket_clause, 'nature_id' , 'custom_fields->>''1''');
 
+UPDATE history SET user_id = (select user_id from users order by user_id='superadmin' desc limit 1) where user_id = '';
+
 /* users followed resources */
 DROP TABLE IF EXISTS users_followed_resources;
 CREATE TABLE users_followed_resources
diff --git a/modules/visa/class/FastParapheurController.php b/modules/visa/class/FastParapheurController.php
index 781ba8f02a4bc7cdbdf849237c8eb2aff36bf27d..1310907a50540ad1b8b2b487d0822205c8b7ff28 100755
--- a/modules/visa/class/FastParapheurController.php
+++ b/modules/visa/class/FastParapheurController.php
@@ -16,7 +16,7 @@ class FastParapheurController
 {
     public static function retrieveSignedMails($aArgs)
     {
-        foreach($aArgs['idsToRetrieve']['noVersion'] as $noVersion){
+        foreach ($aArgs['idsToRetrieve']['noVersion'] as $noVersion) {
             $xmlPostString = '<?xml version="1.0" encoding="utf-8"?>
             <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sei="http://sei.ws.fast.cdc.com/">
                 <soapenv:Header/>
@@ -38,23 +38,23 @@ class FastParapheurController
             ]);
 
             $isError    = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body;
-            if(!empty($isError ->Fault[0])){
+            if (!empty($isError ->Fault[0])) {
                 // TODO gestion des erreurs
-                echo _PJ_NUMBER . $noVersion->res_id . ' ' . _AND_DOC_ORIG . $noVersion->res_id_master . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL;
+                echo 'PJ n° ' . $noVersion->res_id . ' et document original n° ' . $noVersion->res_id_master . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL;
                 continue;
             }
 
             $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://sei.ws.fast.cdc.com/')->historyResponse->children();
 
-            foreach ($response->return as $res){    // Loop on all steps of the documents (prepared, send to signature, signed etc...)
+            foreach ($response->return as $res) {    // Loop on all steps of the documents (prepared, send to signature, signed etc...)
                 $state      = (string) $res->stateName;
-                if($state == $aArgs['config']['data']['validatedState']){
+                if ($state == $aArgs['config']['data']['validatedState']) {
                     $response = self::download(['config' => $aArgs['config'], 'documentId' => $noVersion->external_id]);
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->status = 'validated';
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->format = 'pdf';
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->encodedFile = $response['b64FileContent'];
                     break;
-                }else if($state == $aArgs['config']['data']['refusedState']){
+                } elseif ($state == $aArgs['config']['data']['refusedState']) {
                     $GLOBALS['db'] = new \SrcCore\models\DatabasePDO(['customId' => $GLOBALS['CustomId']]);
                     $query = $GLOBALS['db']->query(
                         "SELECT user_id, firstname, lastname FROM listinstance LEFT JOIN users ON item_id = user_id WHERE res_id = ? AND item_mode = ?",
@@ -66,7 +66,7 @@ class FastParapheurController
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->status = 'refused';
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->noteContent = $res->lastname . ' ' . $res->firstname . ' : ' . $response;
                     break;
-                }else{
+                } else {
                     $aArgs['idsToRetrieve']['noVersion'][$noVersion->res_id]->status = 'waiting';
                 }
             }
@@ -74,8 +74,9 @@ class FastParapheurController
         return $aArgs['idsToRetrieve'];
     }
 
-    public static function upload($aArgs){
-	    $circuitId          = $aArgs['circuitId'];
+    public static function upload($aArgs)
+    {
+        $circuitId          = $aArgs['circuitId'];
         $label              = $aArgs['label'];
         $subscriberId       = $aArgs['businessId'];
 
@@ -87,7 +88,7 @@ class FastParapheurController
             'data'                  => [$aArgs['resIdMaster']]
         ]);
 
-        if($annexes['letterbox'][0]['category_id'] !== 'outgoing'){
+        if ($annexes['letterbox'][0]['category_id'] !== 'outgoing') {
             $letterboxPath                    = \Docserver\models\DocserverModel::getByDocserverId(['docserverId' => $annexes['letterbox'][0]['docserver_id'], 'select' => ['path_template']]);
             $annexes['letterbox'][0]['filePath'] = $letterboxPath['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $annexes['letterbox'][0]['path']) . $annexes['letterbox'][0]['filename'];
         }
@@ -109,7 +110,7 @@ class FastParapheurController
 
         $attachments         = \Attachment\models\AttachmentModel::get([
             'select'         => ['res_id', 'title', 'attachment_type','path', 'res_id_master', 'format'],
-            'where'          => ['res_id_master = ?', 'attachment_type not in (?)', "status not in ('DEL', 'OBS')", 'in_signature_book = TRUE'],
+            'where'          => ['res_id_master = ?', 'attachment_type not in (?)', "status not in ('DEL', 'OBS', 'FRZ')", 'in_signature_book = TRUE'],
             'data'           => [$aArgs['resIdMaster'], ['converted_pdf', 'incoming_mail_attachment', 'print_folder', 'signed_response']]
         ]);
 
@@ -122,25 +123,26 @@ class FastParapheurController
 
             $attachmentPath         =  \Docserver\models\DocserverModel::getByDocserverId(['docserverId' => $adrInfo['docserver_id'], 'select' => ['path_template']]);
             $attachmentFilePath     = $attachmentPath['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $adrInfo['path']) . $adrInfo['filename'];
-            $attachmentFileName     = 'projet_courrier_' . $attachments[$i]['res_id_master'] . '_' . rand(0001,9999) . '.pdf';
+            $attachmentFileName     = 'projet_courrier_' . $attachments[$i]['res_id_master'] . '_' . rand(0001, 9999) . '.pdf';
 
             $zip            = new ZipArchive();
             $tmpPath        = \SrcCore\models\CoreConfigModel::getTmpPath();
             $zipFilePath    = $tmpPath . DIRECTORY_SEPARATOR
                 . $attachmentFileName . '.zip';  // The zip file need to have the same name as the attachment we want to sign
 
-            if ($zip->open($zipFilePath, ZipArchive::CREATE)!==TRUE) {
+            if ($zip->open($zipFilePath, ZipArchive::CREATE)!==true) {
                 exit(_ERROR_CREATE_ZIP . "<$zipFilePath>\n");
             }
             $zip->addFile($attachmentFilePath, $attachmentFileName);
 
-            if($annexes['letterbox'][0]['category_id'] !== 'outgoing'){
+            if ($annexes['letterbox'][0]['category_id'] !== 'outgoing') {
                 $zip->addFile($annexes['letterbox'][0]['filePath'], 'document_principal.' . $annexes['letterbox'][0]['format']);
             }
 
-            if(isset($annexes['attachments'])) {
+            if (isset($annexes['attachments'])) {
                 for ($j = 0; $j < count($annexes['attachments']); $j++) {
-                    $zip->addFile($annexes['attachments'][$j]['filePath'],
+                    $zip->addFile(
+                        $annexes['attachments'][$j]['filePath'],
                         'PJ_' . ($j + 1) . '.' . $annexes['attachments'][$j]['format']
                     );
                 }
@@ -178,20 +180,22 @@ class FastParapheurController
                 ]
             ]);
 
-            $isError    = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body;
-            if(!empty($isError ->Fault[0])){
-                // TODO gestion des erreurs
-                //echo (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL;
-                return false;
-            }else{
+            if (!empty($curlReturn['error'])) {
+                return ['error' => $curlReturn['error']];
+            } elseif (!empty($curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0])) {
+                $error = (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL;
+                return ['error' => $error];
+            } else {
                 $documentId = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://sei.ws.fast.cdc.com/')->uploadResponse->children();
                 $attachmentToFreeze[$collId][$resId] = (string) $documentId;
             }
         }
-        return $attachmentToFreeze;
+
+        return ['sended' => $attachmentToFreeze];
     }
 
-    public static function download($aArgs){
+    public static function download($aArgs)
+    {
         $xmlPostString = '<?xml version="1.0" encoding="utf-8"?>
             <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sei="http://sei.ws.fast.cdc.com/">
                 <soapenv:Header/>
@@ -213,17 +217,17 @@ class FastParapheurController
         ]);
 
         $isError    = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body;
-        if(!empty($isError ->Fault[0])){
+        if (!empty($isError ->Fault[0])) {
             // TODO gestion des erreurs
             echo (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL;
             return false;
-        }else{
+        } else {
             $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://sei.ws.fast.cdc.com/')->downloadResponse->children()->return;
             $returnedDocumentId = (string) $response->documentId;
-            if($aArgs['documentId'] !== $returnedDocumentId){
+            if ($aArgs['documentId'] !== $returnedDocumentId) {
                 // TODO gestion d'une potentiel erreur
                 return false;
-            }else{
+            } else {
                 $b64FileContent = $response->content;
                 return ['b64FileContent' => (string)$b64FileContent, 'documentId' => $returnedDocumentId];
             }
@@ -255,7 +259,7 @@ class FastParapheurController
             'data'      => [$aArgs['resIdMaster']]
         ])[0];
 
-        if(empty($signatory['business_id']) || substr($signatory['business_id'], 0, 3) == 'org'){
+        if (empty($signatory['business_id']) || substr($signatory['business_id'], 0, 3) == 'org') {
             $signatory['business_id'] = $config['data']['subscriberId'];
         }
 
@@ -288,5 +292,4 @@ class FastParapheurController
 
         return $response;
     }
-
 }
diff --git a/package.json b/package.json
index 946e50e2496fa629c9e0ca86c71a188dc94b5732..b2c6ff986f8b4cf047ae8a06ba147f9bc57b8618 100755
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
     "@types/datatables.net": "^1.10.18",
     "@types/jquery": "^2.0.53",
     "@types/node": "^7.10.8",
-    "ajv": "^6.10.2",
+    "ajv": "^6.11.0",
     "hammerjs": "^2.0.8",
     "html-minifier": "^3.5.21",
     "ng2-dnd": "^5.0.2",
diff --git a/rest/index.php b/rest/index.php
index 865cb1802d1cb74d159f08426d54f9cdc7b49088..72c5561ac708a5e7b57aae7f2f149964b64bb2e5 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -250,11 +250,12 @@ $app->delete('/groups/{id}/privileges/{privilegeId}', \Group\controllers\Privile
 $app->put('/groups/{id}/privileges/{privilegeId}/parameters', \Group\controllers\PrivilegeController::class . ':updateParameters');
 $app->get('/groups/{id}/privileges/{privilegeId}/parameters', \Group\controllers\PrivilegeController::class . ':getParameters');
 
-//Histories
-$app->get('/histories', \History\controllers\HistoryController::class . ':get');
-$app->get('/histories/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId');
-$app->get('/histories/resources/{resId}', \History\controllers\HistoryController::class . ':getByResourceId');
-$app->get('/histories/resources/{resId}/workflow', \History\controllers\HistoryController::class . ':getWorkflowByResourceId');
+//History
+$app->get('/history', \History\controllers\HistoryController::class . ':get');
+$app->get('/history/availableFilters', \History\controllers\HistoryController::class . ':getAvailableFilters');
+$app->get('/history/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId');
+$app->get('/history/resources/{resId}', \History\controllers\HistoryController::class . ':getByResourceId');
+$app->get('/history/resources/{resId}/workflow', \History\controllers\HistoryController::class . ':getWorkflowByResourceId');
 
 //Header
 $app->get('/header', \SrcCore\controllers\CoreController::class . ':getHeader');
@@ -392,6 +393,7 @@ $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/ac
 $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/checkValidateParallelOpinion', \Action\controllers\PreProcessActionController::class . ':checkValidateParallelOpinion');
 $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/checkContinueOpinionCircuit', \Action\controllers\PreProcessActionController::class . ':checkContinueOpinionCircuit');
 $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/checkGiveParallelOpinion', \Action\controllers\PreProcessActionController::class . ':checkGiveParallelOpinion');
+$app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/checkInterruptRejectResetVisa', \Action\controllers\PreProcessActionController::class . ':checkInterruptRejectResetVisa');
 
 //Search
 $app->get('/search', \Search\controllers\SearchController::class . ':get');
diff --git a/src/app/action/controllers/ActionMethodController.php b/src/app/action/controllers/ActionMethodController.php
index dd3c0685aed9b5fb6fc8931f5d5d576f50839533..ba24fd07f4f125280093a62cc3b8c2828b3d2bdb 100644
--- a/src/app/action/controllers/ActionMethodController.php
+++ b/src/app/action/controllers/ActionMethodController.php
@@ -673,7 +673,7 @@ class ActionMethodController
             'limit'   => 1
         ]);
 
-        if (empty($currentStep) || empty($currentStep[0])) {
+        if (empty($currentStep)) {
             return ['errors' => ['No workflow or workflow finished']];
         }
         $currentStep = $currentStep[0];
diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php
index e2fbfc23c5afe8aebc835243876cdc5b70796bb3..31851fd86b423c72dd0cd3e14883a4f6b90fc460 100755
--- a/src/app/action/controllers/PreProcessActionController.php
+++ b/src/app/action/controllers/PreProcessActionController.php
@@ -985,6 +985,66 @@ class PreProcessActionController
         return $response->withJson(['resourcesInformations' => $resourcesInformations]);
     }
 
+    public function checkInterruptRejectResetVisa(Request $request, Response $response, array $args)
+    {
+        $body = $request->getParsedBody();
+
+        if (!Validator::arrayType()->notEmpty()->validate($body['resources'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Body resources is empty or not an array']);
+        }
+
+        $errors = ResourceListController::listControl(['groupId' => $args['groupId'], 'userId' => $args['userId'], 'basketId' => $args['basketId'], 'currentUserId' => $GLOBALS['id']]);
+        if (!empty($errors['errors'])) {
+            return $response->withStatus($errors['code'])->withJson(['errors' => $errors['errors']]);
+        }
+
+        $body['resources'] = array_slice($body['resources'], 0, 500);
+        if (!ResController::hasRightByResId(['resId' => $body['resources'], 'userId' => $GLOBALS['id']])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
+        }
+
+        $signableAttachmentsTypes = [];
+        $attachmentsTypes = AttachmentModel::getAttachmentsTypesByXML();
+        foreach ($attachmentsTypes as $key => $type) {
+            if ($type['sign']) {
+                $signableAttachmentsTypes[] = $key;
+            }
+        }
+
+        $resourcesInformation = [];
+        foreach ($body['resources'] as $resId) {
+            $resource = ResModel::getById(['resId' => $resId, 'select' => ['alt_identifier']]);
+            if (empty($resource['alt_identifier'])) {
+                $resource['alt_identifier'] = _UNDEFINED;
+            }
+
+            $isSignatory = ListInstanceModel::get(['select' => ['signatory', 'requested_signature'], 'where' => ['res_id = ?', 'difflist_type = ?', 'process_date is null'], 'data' => [$resId, 'VISA_CIRCUIT'], 'orderBy' => ['listinstance_id'], 'limit' => 1]);
+            if (empty($isSignatory[0])) {
+                $hasCircuit = ListInstanceModel::get(['select' => [1], 'where' => ['res_id = ?', 'difflist_type = ?'], 'data' => [$resId, 'VISA_CIRCUIT']]);
+                if (!empty($hasCircuit)) {
+                    $resourcesInformation['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'endedCircuit'];
+                } else {
+                    $resourcesInformation['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noCircuitAvailable'];
+                }
+            } else {
+                $hasPrevious = ListInstanceModel::get([
+                    'select'  => [1],
+                    'where'   => ['res_id = ?', 'difflist_type = ?', 'process_date is not null'],
+                    'data'    => [$resId, 'VISA_CIRCUIT'],
+                    'orderBy' => ['listinstance_id'],
+                    'limit'   => 1
+                ]);
+                if (!empty($hasPrevious)) {
+                    $resourcesInformation['success'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId];
+                } else {
+                    $resourcesInformation['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'circuitNotStarted'];
+                }
+            }
+        }
+
+        return $response->withJson(['resourcesInformations' => $resourcesInformation]);
+    }
+
     public function checkValidateParallelOpinion(Request $request, Response $response, array $args)
     {
         $body = $request->getParsedBody();
@@ -1030,7 +1090,7 @@ class PreProcessActionController
                 continue;
             }
 
-            $note = str_replace('['._TO_AVIS.']', '', $opinionNote[0]['note_text']);
+            $note = str_replace('['._TO_AVIS.'] ', '', $opinionNote[0]['note_text']);
             $userInfo = UserModel::getLabelledUserById(['id' => $opinionNote[0]['user_id']]);
             $resourcesInformation['success'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resource['res_id'], 'avisUserAsk' => $userInfo, 'note' => $note, 'opinionLimitDate' => $resource['opinion_limit_date']];
         }
@@ -1175,67 +1235,6 @@ class PreProcessActionController
         return $response->withJson(['resourcesInformations' => $resourcesInformation]);
     }
 
-    public function checkValidateRecommendation(Request $request, Response $response, array $args)
-    {
-        $body = $request->getParsedBody();
-
-        if (!Validator::arrayType()->notEmpty()->validate($body['resources'])) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body resources is empty or not an array']);
-        }
-
-        $errors = ResourceListController::listControl(['groupId' => $args['groupId'], 'userId' => $args['userId'], 'basketId' => $args['basketId'], 'currentUserId' => $GLOBALS['id']]);
-        if (!empty($errors['errors'])) {
-            return $response->withStatus($errors['code'])->withJson(['errors' => $errors['errors']]);
-        }
-
-        $body['resources'] = array_slice($body['resources'], 0, 500);
-        if (!ResController::hasRightByResId(['resId' => $body['resources'], 'userId' => $GLOBALS['id']])) {
-            return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
-        }
-
-        $resourcesInformation = [];
-        foreach ($body['resources'] as $resId) {
-            $resource = ResModel::getById(['resId' => $resId, 'select' => ['alt_identifier', 'opinion_limit_date']]);
-
-            if (empty($resource['alt_identifier'])) {
-                $resource['alt_identifier'] = _UNDEFINED;
-            }
-
-            if (empty($resource['opinion_limit_date'])) {
-                return $response->withStatus(400)->withJson(['errors' => 'No opinion limit date for resource ' . $resource['alt_identifier']]);
-            }
-
-            $opinionNote = NoteModel::get([
-                'where'  => ['identifier = ?', "note_text ilike '[" . _TO_AVIS . "]%'"],
-                'data'   => [$resId]
-            ]);
-
-            if (empty($opinionNote)) {
-                return $response->withStatus(400)->withJson(['errors' => 'No opinion note for resource ' . $resource['alt_identifier']]);
-            }
-
-            $isSignatory = ListInstanceModel::get([
-                'select'  => [1],
-                'where'   => ['res_id = ?', 'difflist_type = ?', 'process_date is null'],
-                'data'    => [$resId, 'entity_id'],
-                'orderBy' => ['listinstance_id'],
-                'limit'   => 1
-            ]);
-            if (empty($isSignatory[0])) {
-                $hasCircuit = ListInstanceModel::get(['select' => [1], 'where' => ['res_id = ?', 'difflist_type = ?'], 'data' => [$resId, 'entity_id']]);
-                if (!empty($hasCircuit)) {
-                    $resourcesInformation['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'endedCircuit'];
-                } else {
-                    $resourcesInformation['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noCircuitAvailable'];
-                }
-            } else {
-                $resourcesInformation['success'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId];
-            }
-        }
-
-        return $response->withJson(['resourcesInformations' => $resourcesInformation]);
-    }
-
     public function isDestinationChanging(Request $request, Response $response, array $args)
     {
         if (!ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) {
diff --git a/src/app/basket/controllers/BasketController.php b/src/app/basket/controllers/BasketController.php
index adfbfd504f5ea63020fc87a8966704ed583e2201..cc3b8c73b00a2c14bd0ac6282a5da7121d5fd733 100755
--- a/src/app/basket/controllers/BasketController.php
+++ b/src/app/basket/controllers/BasketController.php
@@ -533,7 +533,6 @@ class BasketController
         ValidatorModel::arrayType($aArgs, ['groupActions']);
         ValidatorModel::stringType($aArgs, ['userId']);
 
-        $defaultAction = false;
         $actions = ActionModel::get(['select' => ['id']]);
 
         foreach ($aArgs['groupActions'] as $key => $groupAction) {
@@ -547,9 +546,6 @@ class BasketController
                 if (!$actionExists) {
                     return ['errors' => 'Action does not exist'];
                 }
-                if ($groupAction['default_action_list'] === true) {
-                    $defaultAction = true;
-                }
 
                 $aArgs['groupActions'][$key]['where_clause'] = empty($groupAction['where_clause']) ? '' : $groupAction['where_clause'];
                 $aArgs['groupActions'][$key]['used_in_basketlist'] = empty($groupAction['used_in_basketlist']) ? 'N' : 'Y';
@@ -566,9 +562,6 @@ class BasketController
                 }
             }
         }
-        if (!$defaultAction) {
-            return ['errors' => 'Default action needed'];
-        }
 
         return $aArgs['groupActions'];
     }
diff --git a/src/app/contentManagement/controllers/OnlyOfficeController.php b/src/app/contentManagement/controllers/OnlyOfficeController.php
index 4b2e81fae89fe5bb19413a71487e889331461885..125b2df8cf13e8511c778b344edbc1ef2e2ed4db 100644
--- a/src/app/contentManagement/controllers/OnlyOfficeController.php
+++ b/src/app/contentManagement/controllers/OnlyOfficeController.php
@@ -164,7 +164,7 @@ class OnlyOfficeController
         $uri = (string)$loadedXml->onlyoffice->server_uri;
         $port = (string)$loadedXml->onlyoffice->server_port;
 
-        if (strpos($checkUrl, "{$uri}:{$port}/cache/files/") !== 0) {
+        if (strpos($checkUrl, "{$uri}:{$port}/cache/files/") !== 0 && ($port != 80 || strpos($checkUrl, "{$uri}/cache/files/") !== 0)) {
             return $response->withStatus(400)->withJson(['errors' => 'Query params url is not allowed']);
         }
 
diff --git a/src/app/history/controllers/HistoryController.php b/src/app/history/controllers/HistoryController.php
index 409c74c068ee6872de6166ee66f3d05567faf6c7..095bb48a39706cc3d4a375ab997a02b1f8d41431 100755
--- a/src/app/history/controllers/HistoryController.php
+++ b/src/app/history/controllers/HistoryController.php
@@ -14,6 +14,7 @@
 
 namespace History\controllers;
 
+use Action\models\ActionModel;
 use Group\controllers\PrivilegeController;
 use Resource\controllers\ResController;
 use Respect\Validation\Validator;
@@ -33,27 +34,78 @@ class HistoryController
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
         }
 
-        $data = $request->getQueryParams();
+        $queryParams = $request->getQueryParams();
+
+        $limit = 25;
+        if (!empty($queryParams['limit']) && is_numeric($queryParams['limit'])) {
+            $limit = (int)$queryParams['limit'];
+        }
+        $offset = 0;
+        if (!empty($queryParams['offset']) && is_numeric($queryParams['offset'])) {
+            $offset = (int)$queryParams['offset'];
+        }
 
-        $check = Validator::floatVal()->notEmpty()->validate($data['startDate']);
-        $check = $check && Validator::floatVal()->notEmpty()->validate($data['endDate']);
-        if (!$check) {
-            return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
+        $where = [];
+        $data = [];
+        if (!empty($queryParams['users']) && is_array($queryParams['users'])) {
+            $userIds = [];
+            $userLogins = [];
+            foreach ($queryParams['users'] as $user) {
+                if (is_numeric($user)) {
+                    $userIds[] = $user;
+                } else {
+                    $userLogins[] = $user;
+                }
+            }
+            $users = [];
+            if (!empty($userIds)) {
+                $users = UserModel::get(['select' => ['user_id'], 'where' => ['id in (?)'], 'data' => [$userIds]]);
+                $users = array_column($users, 'user_id');
+            }
+            $users = array_merge($users, $userLogins);
+            $where[] = 'user_id in (?)';
+            $data[] = $users;
+        }
+        if (!empty($queryParams['startDate'])) {
+            $where[] = 'event_date > ?';
+            $data[] = date('Y-m-d H:i:s', $queryParams['startDate']);
+        }
+        if (!empty($queryParams['endDate'])) {
+            $where[] = 'event_date < ?';
+            $data[] = date('Y-m-d H:i:s', $queryParams['endDate']);
+        }
+        if (!empty($queryParams['actions']) && is_array($queryParams['actions'])) {
+            $actions = [];
+            foreach ($queryParams['actions'] as $action) {
+                if (is_numeric($action)) {
+                    $actions[] = "ACTION#{$action}";
+                } else {
+                    $actions[] = $action;
+                }
+            }
+            $where[] = 'event_type in (?)';
+            $data[] = $actions;
         }
 
-        $maxRequestSize = 25000;
+        $order = !in_array($queryParams['order'], ['asc', 'desc']) ? '' : $queryParams['order'];
+        $orderBy = !in_array($queryParams['orderBy'], ['event_date', 'user_id', 'info']) ? ['event_date DESC'] : ["{$queryParams['orderBy']} {$order}"];
 
-        $histories = HistoryModel::get([
-            'select'    => ['event_date', 'event_type', 'user_id', 'info', 'remote_ip'],
-            'where'     => ['event_date > ?', 'event_date < ?'],
-            'data'      => [date('Y-m-d H:i:s', $data['startDate']), date('Y-m-d H:i:s', $data['endDate'])],
-            'orderBy'   => ['event_date DESC'],
-            'limit'     => $maxRequestSize
+        $history = HistoryModel::get([
+            'select'    => ['event_date', 'user_id', 'info', 'remote_ip', 'count(1) OVER()'],
+            'where'     => $where,
+            'data'      => $data,
+            'orderBy'   => $orderBy,
+            'offset'    => $offset,
+            'limit'     => $limit
         ]);
 
-        $limitExceeded = (count($histories) == $maxRequestSize);
+        $total = $history[0]['count'] ?? 0;
+        foreach ($history as $key => $value) {
+            $history[$key]['userLabel'] = UserModel::getLabelledUserById(['login' => $value['user_id']]);
+            unset($history[$key]['count']);
+        }
 
-        return $response->withJson(['histories' => $histories, 'limitExceeded' => $limitExceeded]);
+        return $response->withJson(['history' => $history, 'count' => $total]);
     }
 
     public static function add(array $aArgs)
@@ -134,4 +186,43 @@ class HistoryController
 
         return $response->withJson(['history' => $history]);
     }
+
+    public function getAvailableFilters(Request $request, Response $response)
+    {
+        if (!PrivilegeController::hasPrivilege(['privilegeId' => 'view_history', 'userId' => $GLOBALS['id']])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $eventTypes = HistoryModel::get([
+            'select'    => ['DISTINCT(event_type)']
+        ]);
+
+        $actions = [];
+        $systemActions = [];
+        foreach ($eventTypes as $eventType) {
+            if (strpos($eventType['event_type'], 'ACTION#') === 0) {
+                $exp = explode('#', $eventType['event_type']);
+                if (!empty($exp[1])) {
+                    $action = ActionModel::getById(['select' => ['label_action'], 'id' => $exp[1]]);
+                }
+                $label = !empty($action) ? $action['label_action'] : null;
+                $actions[] = ['id' => $exp[1], 'label' => $label];
+            } else {
+                $systemActions[] = ['id' => $eventType['event_type'], 'label' => null];
+            }
+        }
+
+        $usersInHistory = HistoryModel::get([
+            'select'    => ['DISTINCT(user_id)']
+        ]);
+
+        $users = [];
+        foreach ($usersInHistory as $value) {
+            $user = UserModel::getByLogin(['login' => $value['user_id'], 'select' => ['id', 'firstname', 'lastname']]);
+
+            $users[] = ['id' => $user['id'] ?? null, 'login' => $value['user_id'], 'label' => !empty($user['id']) ? "{$user['firstname']} {$user['lastname']}" : null];
+        }
+
+        return $response->withJson(['actions' => $actions, 'systemActions' => $systemActions, 'users' => $users]);
+    }
 }
diff --git a/src/app/history/models/HistoryModelAbstract.php b/src/app/history/models/HistoryModelAbstract.php
index 04655a19b263b874f9eb928fa711d21a25872423..923468c8601e154fc51737f51339216cd6a2c4a7 100755
--- a/src/app/history/models/HistoryModelAbstract.php
+++ b/src/app/history/models/HistoryModelAbstract.php
@@ -19,19 +19,20 @@ use SrcCore\models\DatabaseModel;
 
 abstract class HistoryModelAbstract
 {
-    public static function get(array $aArgs)
+    public static function get(array $args)
     {
-        ValidatorModel::notEmpty($aArgs, ['select']);
-        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']);
-        ValidatorModel::intVal($aArgs, ['limit']);
+        ValidatorModel::notEmpty($args, ['select']);
+        ValidatorModel::arrayType($args, ['select', 'where', 'data', 'orderBy']);
+        ValidatorModel::intVal($args, ['offset', 'limit']);
 
         $aHistories = DatabaseModel::select([
-            'select'    => $aArgs['select'],
+            'select'    => $args['select'],
             'table'     => ['history'],
-            'where'     => empty($aArgs['where']) ? [] : $aArgs['where'],
-            'data'      => empty($aArgs['data']) ? [] : $aArgs['data'],
-            'order_by'  => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'],
-            'limit'     => empty($aArgs['limit']) ? 0 : $aArgs['limit']
+            'where'     => $args['where'] ?? [],
+            'data'      => $args['data'] ?? [],
+            'order_by'  => $args['orderBy'] ?? [],
+            'offset'    => $args['offset'] ?? 0,
+            'limit'     => $args['limit'] ?? 0
         ]);
 
         return $aHistories;
@@ -111,21 +112,4 @@ abstract class HistoryModelAbstract
 
         return $history;
     }
-
-    public static function getFilter(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['select','event_date']);
-        ValidatorModel::stringType($aArgs, ['select']);
-
-        $aReturn = DatabaseModel::select(
-            [
-            'select'   => ['DISTINCT('.$aArgs['select'].')'],
-            'table'    => ['history'],
-            'where'    => ["event_date >= date '".$aArgs['event_date']."'","event_date < date '".$aArgs['event_date']."' + interval '1 month'"],
-            'order_by' => [$aArgs['select'].' ASC']
-            ]
-        );
-
-        return $aReturn;
-    }
 }
diff --git a/src/app/resource/controllers/ResourceListController.php b/src/app/resource/controllers/ResourceListController.php
index 3e4a0bcd724bbda48ecaed9f43371bbde2fb8583..f29634728764d7b9de879f7f5aacbd4d6291d6d3 100644
--- a/src/app/resource/controllers/ResourceListController.php
+++ b/src/app/resource/controllers/ResourceListController.php
@@ -281,6 +281,17 @@ class ResourceListController
             $where[] = 'doctypes.type_id in (?)';
             $queryData[] = explode(',', $args['data']['doctypes']);
         }
+        if (!empty($args['data']['folders'])) {
+            $resourcesInFolders = FolderModel::getWithResources([
+                'select' => ['resources_folders.res_id'],
+                'where'  => ['resources_folders.folder_id in (?)'],
+                'data'   => [explode(',', $args['data']['folders'])]
+            ]);
+            $resourcesInFolders = array_column($resourcesInFolders, 'res_id');
+
+            $where[] = 'res_id in (?)';
+            $queryData[] = $resourcesInFolders;
+        }
 
         if (!empty($args['data']['order']) && strpos($args['data']['order'], 'alt_identifier') !== false) {
             $order = 'order_alphanum(alt_identifier) ' . explode(' ', $args['data']['order'])[1];
@@ -876,12 +887,14 @@ class ResourceListController
         $whereCategories = $where;
         $whereStatuses   = $where;
         $whereEntities   = $where;
-        $whereDocTypes    = $where;
+        $whereDocTypes   = $where;
+        $whereFolders    = $where;
         $dataPriorities  = $queryData;
         $dataCategories  = $queryData;
         $dataStatuses    = $queryData;
         $dataEntities    = $queryData;
-        $dataDocTypes     = $queryData;
+        $dataDocTypes    = $queryData;
+        $dataFolders     = $queryData;
 
         if (isset($data['priorities'])) {
             if (empty($data['priorities'])) {
@@ -898,12 +911,14 @@ class ResourceListController
                 $dataStatuses[]   = explode(',', $replace);
                 $dataEntities[]   = explode(',', $replace);
                 $dataDocTypes[]   = explode(',', $replace);
+                $dataFolders[]    = explode(',', $replace);
             }
 
             $whereCategories[] = $tmpWhere;
             $whereStatuses[]   = $tmpWhere;
             $whereEntities[]   = $tmpWhere;
             $whereDocTypes[]   = $tmpWhere;
+            $whereFolders[]    = $tmpWhere;
         }
         if (isset($data['categories'])) {
             if (empty($data['categories'])) {
@@ -920,12 +935,14 @@ class ResourceListController
                 $dataStatuses[]   = explode(',', $replace);
                 $dataEntities[]   = explode(',', $replace);
                 $dataDocTypes[]   = explode(',', $replace);
+                $dataFolders[]    = explode(',', $replace);
             }
 
             $wherePriorities[] = $tmpWhere;
             $whereStatuses[]   = $tmpWhere;
             $whereEntities[]   = $tmpWhere;
             $whereDocTypes[]   = $tmpWhere;
+            $whereFolders[]    = $tmpWhere;
         }
         if (!empty($data['statuses'])) {
             $wherePriorities[] = 'status in (?)';
@@ -936,6 +953,8 @@ class ResourceListController
             $dataEntities[]    = explode(',', $data['statuses']);
             $whereDocTypes[]   = 'status in (?)';
             $dataDocTypes[]    = explode(',', $data['statuses']);
+            $whereFolders[]    = 'status in (?)';
+            $dataFolders[]     = explode(',', $data['statuses']);
         }
         if (!empty($data['doctypes'])) {
             $wherePriorities[] = 'type_id in (?)';
@@ -946,6 +965,8 @@ class ResourceListController
             $dataEntities[]    = explode(',', $data['doctypes']);
             $whereStatuses[]   = 'type_id in (?)';
             $dataStatuses[]    = explode(',', $data['doctypes']);
+            $whereFolders[]    = 'type_id in (?)';
+            $dataFolders[]     = explode(',', $data['doctypes']);
         }
         if (isset($data['entities'])) {
             if (empty($data['entities'])) {
@@ -962,12 +983,14 @@ class ResourceListController
                 $dataCategories[] = explode(',', $replace);
                 $dataStatuses[] = explode(',', $replace);
                 $dataDocTypes[] = explode(',', $replace);
+                $dataFolders[]  = explode(',', $replace);
             }
 
             $wherePriorities[] = $tmpWhere;
             $whereCategories[] = $tmpWhere;
             $whereStatuses[]   = $tmpWhere;
             $whereDocTypes[]   = $tmpWhere;
+            $whereFolders[]    = $tmpWhere;
         }
         if (!empty($data['entitiesChildren'])) {
             $entities = explode(',', $data['entitiesChildren']);
@@ -985,6 +1008,8 @@ class ResourceListController
                 $dataStatuses[]    = $entitiesChildren;
                 $whereDocTypes[]   = 'destination in (?)';
                 $dataDocTypes[]    = $entitiesChildren;
+                $whereFolders[]    = 'destination in (?)';
+                $dataFolders[]     = $entitiesChildren;
             }
         }
 
@@ -1084,11 +1109,42 @@ class ResourceListController
             ];
         }
 
+        $folders = [];
+
+        $resIds = ResModel::getOnView([
+            'select' => ['res_id'],
+            'where'  => $whereFolders,
+            'data'   => $dataFolders
+        ]);
+        $resIds = array_column($resIds, 'res_id');
+
+        $userEntities = EntityModel::getWithUserEntities([
+            'select' => ['entities.id'],
+            'where'  => ['users_entities.user_id = ?'],
+            'data'   => [$GLOBALS['userId']]
+        ]);
+        $userEntities = array_column($userEntities, 'id');
+
+        $rawFolders = FolderModel::getWithEntitiesAndResources([
+            'select'  => ['folders.id', 'folders.label', 'count(resources_folders.res_id) as count'],
+            'where'   => ['resources_folders.res_id in (?)', '(folders.user_id = ? OR entities_folders.entity_id in (?))'],
+            'data'    => [$resIds, $GLOBALS['id'], $userEntities],
+            'groupBy' => ['folders.id', 'folders.label']
+        ]);
+        foreach ($rawFolders as $key => $value) {
+            $folders[] = [
+                'id'    => empty($value['id']) ? null : $value['id'],
+                'label' => empty($value['label']) ? '_UNDEFINED' : $value['label'],
+                'count' => $value['count']
+            ];
+        }
+
         $priorities = (count($priorities) >= 2) ? $priorities : [];
         $categories = (count($categories) >= 2) ? $categories : [];
         $statuses   = (count($statuses) >= 2) ? $statuses : [];
         $entities   = (count($entities) >= 2) ? $entities : [];
         $docTypes   = (count($docTypes) >= 2) ? $docTypes : [];
+        $folders    = (count($folders) >= 2) ? $folders : [];
 
         $entitiesChildren = [];
         foreach ($entities as $entity) {
@@ -1122,14 +1178,17 @@ class ResourceListController
 
         usort($docTypes, ['Resource\controllers\ResourceListController', 'compareSortOnLabel']);
 
+        usort($folders, ['Resource\controllers\ResourceListController', 'compareSortOnLabel']);
+
 
         return [
-            'entities' => $entities,
-            'priorities' => $priorities,
-            'categories' => $categories,
-            'statuses' => $statuses,
+            'entities'         => $entities,
+            'priorities'       => $priorities,
+            'categories'       => $categories,
+            'statuses'         => $statuses,
             'entitiesChildren' => $entitiesChildren,
-            'doctypes' => $docTypes
+            'doctypes'         => $docTypes,
+            'folders'          => $folders
         ];
     }
 
diff --git a/src/app/search/controllers/SearchController.php b/src/app/search/controllers/SearchController.php
index 25cf7bc92436d49df072172ab2cc87fd079a5165..5105a763463a1db2f2c43101164432c80c1f3a10 100644
--- a/src/app/search/controllers/SearchController.php
+++ b/src/app/search/controllers/SearchController.php
@@ -127,6 +127,13 @@ class SearchController
             }
         }
 
+        $nonSearchableStatuses = StatusModel::get(['select' => ['id'], 'where' => ['can_be_searched = ?'], 'data' => ['N']]);
+        if (!empty($nonSearchableStatuses)) {
+            $nonSearchableStatuses = array_column($nonSearchableStatuses, 'id');
+            $searchWhere[] = 'status not in (?)';
+            $searchData[] = $nonSearchableStatuses;
+        }
+
         $limit = 25;
         if (!empty($queryParams['limit']) && is_numeric($queryParams['limit'])) {
             $limit = (int)$queryParams['limit'];
@@ -183,7 +190,7 @@ class SearchController
                     }
                 }
             }
-            if (!empty($resource['dest_user'])) {
+            if (!empty($resource['destUser'])) {
                 $resources[$key]['destUserLabel'] = UserModel::getLabelledUserById(['login' => $resource['destUser']]);
             }
             $resources[$key]['hasDocument'] = !empty($resource['filename']);
diff --git a/src/app/status/models/StatusModelAbstract.php b/src/app/status/models/StatusModelAbstract.php
index 51600bd30d0765de262add1e43c959a7fdc11f1a..1b91e475d86b45d5b9744c586e1c24edcacaf6e4 100755
--- a/src/app/status/models/StatusModelAbstract.php
+++ b/src/app/status/models/StatusModelAbstract.php
@@ -19,17 +19,19 @@ use SrcCore\models\DatabaseModel;
 
 abstract class StatusModelAbstract
 {
-    public static function get(array $aArgs = [])
+    public static function get(array $args = [])
     {
-        ValidatorModel::arrayType($aArgs, ['select']);
+        ValidatorModel::arrayType($args, ['select', 'where', 'data']);
 
-        $aReturn = DatabaseModel::select([
-            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+        $statuses = DatabaseModel::select([
+            'select'    => empty($args['select']) ? ['*'] : $args['select'],
             'table'     => ['status'],
+            'where'     => $args['where'] ?? [],
+            'data'      => $args['data'] ?? [],
             'order_by'  => ['label_status']
         ]);
 
-        return $aReturn;
+        return $statuses;
     }
 
     public static function getById(array $aArgs)
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 0023fdb9be8ce240d2fa3173ed623cc02db49719..0585f9c5046c936de68a1421f554a3059505c1a6 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -65,7 +65,7 @@ class UserController
 
         if ($GLOBALS['userId'] == 'superadmin') {
             $users = UserModel::get([
-                'select'    => ['id', 'user_id', 'firstname', 'lastname', 'status', 'mail'],
+                'select'    => ['id', 'user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode'],
                 'where'     => ['user_id != ?', 'status != ?'],
                 'data'      => ['superadmin', 'DEL']
             ]);
@@ -74,20 +74,15 @@ class UserController
             $users = [];
             if (!empty($entities)) {
                 $users = UserEntityModel::getWithUsers([
-                    'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail'],
+                    'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode'],
                     'where'     => ['users_entities.entity_id in (?)', 'status != ?'],
                     'data'      => [$entities, 'DEL']
                 ]);
             }
-            $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail']]);
+            $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode']]);
             $users = array_merge($users, $usersNoEntities);
         }
 
-        $usersIds = [];
-        foreach ($users as $value) {
-            $usersIds[] = $value['user_id'];
-        }
-
         $quota = [];
         $userQuota = ParameterModel::getById(['id' => 'user_quota', 'select' => ['param_value_int']]);
         if (!empty($userQuota['param_value_int'])) {
@@ -1310,7 +1305,6 @@ class UserController
             }
 
             if ($data['mode'] == 'reaffect') {
-
                 $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]);
                 $resIdsToReplace = [];
                 foreach ($listInstances as $listInstance) {
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 39b3beca7efcaa9be914d2317721db51207f53fc..e84737cfd82eca75ba4a9d3a3ec96cd7c93eca46 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -253,7 +253,6 @@ define('_INTERRUPT_WORKFLOW_DESC', 'Update visa date of current supervisor / sig
 define('_PROCEED_WORKFLOW', 'continue the visa flow');
 define('_PROCEED_WORKFLOW_DESC', 'Update visa date of current supervisor / signatory in visa circuit of mail (\'process_date\' of listinstance table).');
 define('_VISA_MAIL', 'Aim the mail');
-define('_VISA_MAIL_DESC', 'Open signatory book to visa / sign the document.');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Send to the contact with a mandatory attachment');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC', 'Open sendmail modal with email of contact linked to document in recipient, attachment is MANDATORY.');
 define('_SEND_ATTACHMENTS_TO_CONTACT', 'Send to the contact');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 0ea42cb0e5bc96015dbe81eea62820da0a944084..450c772c78f5e85b740c20dbc3d1fd9bf4ffcb19 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -238,7 +238,7 @@ define('_SEND_TO_EXTERNAL_SB', 'Envoyer des données vers un parapheur externe')
 define('_SEND_TO_EXTERNAL_NOTEBOOK', 'Envoyer des courriers à annoter vers Maarch Parapheur');
 define('_CLOSE_MAIL_AND_INDEX', 'Clôturer un courrier et lancer l\'indexation');
 define('_CLOSE_MAIL_AND_INDEX_DESC', 'Permet de mettre à jour la date de clôture d\'un courrier ET ouvre la page d\'indexation afin d\'enregistrer un nouveau courrier.');
-define('_CLOSE_MAIL_WITH_ATTACHMENT', 'Clôturer un courrier avec pièce jointe');
+define('_CLOSE_MAIL_WITH_ATTACHMENT', 'Clôturer un courrier avec pièce jointe ou annotation');
 define('_CLOSE_MAIL_WITH_ATTACHMENT_DESC', 'Permet de mettre à jour la date de clôture d\'un courrier avec présence OBLIGATOIRE de pièce(s) jointe(s) / annotation(s).');
 define('_SEND_TO_VISA', 'Envoyer pour visa');
 define('_SEND_TO_VISA_DESC', 'Contrôle si un circuit de visa est configuré ET si un ou plusieurs projets de réponses sont associés au courrier.');
@@ -253,7 +253,6 @@ define('_INTERRUPT_WORKFLOW_DESC', 'Met à jour la date du visa de l\'actuel vis
 define('_PROCEED_WORKFLOW', 'Poursuivre le circuit de visa');
 define('_PROCEED_WORKFLOW_DESC', 'Met à jour la date du visa de l\'actuel viseur / signataire présent dans le circuit de visa du courrier (\'process_date\' de la table listinstance).');
 define('_VISA_MAIL', 'Viser le courrier');
-define('_VISA_MAIL_DESC', 'Ouvre la page du parapheur afin de pouvoir viser / signer le document.');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Envoyer au contact avec une pièce jointe obligatoire et accusé de réception');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC', "Ouvre une modal d'envoi de mail avec l'email du contact associé au courrier en tant que destinataire, présence OBLIGATOIRE de pièce(s) jointe(s) à l'envoi.");
 define('_SEND_ATTACHMENTS_TO_CONTACT', 'Envoyer au contact avec accusé de réception');
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index b0ee983f81255460c623f0bf7d21d832ad23644a..3aef1413da6b786527d360047c81050b50622910 100755
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -252,7 +252,6 @@ define('_INTERRUPT_WORKFLOW_DESC', 'Werkt de datum bij van de huidige goedkeurde
 define('_PROCEED_WORKFLOW', 'Het goedkeuringscircuit verderzetten');
 define('_PROCEED_WORKFLOW_DESC', 'Werkt de datum bij van de huidige goedkeurder / ondertekenaar die in het goedkeuringscircuit van het brief aanwezig is (\process_date\ van de tabel listinstance).');
 define('_VISA_MAIL', 'De e-mail goedkeuren');
-define('_VISA_MAIL_DESC', 'Opent de pagina van het vloeiboek om het document te kunnen goedkeuren / ondertekenen.');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Verzenden naar het contact met een bijlage verplicht');
 define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC', 'Opent een mailverzendingsmodaliteit met de e-mail van het aan het document gekoppelde contact als bestemmeling, VERPLICHTE aanwezigheid van bijlage(n) aan de verzending.');
 define('_SEND_ATTACHMENTS_TO_CONTACT', 'Verzenden aan het contact');
diff --git a/src/frontend/app/actions/redirect-initiator-entity-action/redirect-initiator-entity-action.component.html b/src/frontend/app/actions/redirect-initiator-entity-action/redirect-initiator-entity-action.component.html
index fcb3f31dd7098152e149c1a95413199b3e7ed10b..1b0b10cf9f0696d8d0b47ad4e9b011bcf7633122 100644
--- a/src/frontend/app/actions/redirect-initiator-entity-action/redirect-initiator-entity-action.component.html
+++ b/src/frontend/app/actions/redirect-initiator-entity-action/redirect-initiator-entity-action.component.html
@@ -10,7 +10,7 @@
                 <b *ngIf="data.resIds.length > 1" color="primary" class="highlight">{{data.resIds.length}}
                     {{lang.elements}}</b> ?
                 <div *ngIf="resourcesInfo.withoutEntity.length > 0">
-                    <div class="alert-message alert-message-info acknowledgementList" role="alert">
+                    <div class="alert-message alert-message-danger acknowledgementList" role="alert">
                         <p>
                             {{lang.hasNoEntity}} :
                         </p>
diff --git a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
index 6869206b2403a5f3bebccf286ad60effaba30740..025ae350e3fec895be7d375a18ce42c10a707fc0 100644
--- a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
+++ b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html
@@ -13,7 +13,7 @@
                     <b *ngIf="data.resIds.length == 1" color="primary"
                         class="highlight">{{data.resource.chrono}}</b>
                     <b *ngIf="data.resIds.length > 1" color="primary" class="highlight">{{data.resIds.length}}
-                        {{lang.elements}}</b>> ?
+                        {{lang.elements}}</b> ?
                 </div>
                 <div>
                     <app-maarch-paraph #maarchParapheur *ngIf="signatoryBookEnabled=='maarchParapheur'"
diff --git a/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.html b/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.html
index 842a678f0ae72aaf07f1896ebbab6c0399e83740..1fa9c8fd1febb1f238427f109a33506cbd58d753 100644
--- a/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.html
+++ b/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.html
@@ -11,6 +11,25 @@
                 {{lang.elements}}</b> ?
             <div class="alert-message alert-message-info" role="alert" style="margin-top: 30px;"
                 [innerHTML]="lang.interruptVisaWorkflow"></div>
+
+            <div *ngIf="resourcesErrors.length > 0" class="alert-message alert-message-danger mailList" role="alert">
+                <p>
+                    {{lang.canNotMakeAction}} :
+                </p>
+                <ul>
+                    <li *ngFor="let ressource of resourcesErrors">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+            <div *ngIf="resourcesWarnings.length > 0" class="alert-message alert-message-info mailList" role="alert">
+                <ul style="margin: 0;padding-bottom: 0px;">
+                    <li *ngFor="let ressource of resourcesWarnings">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+
             <app-visa-workflow *ngIf="data.resIds.length == 1" [adminMode]="false" [resId]="data.resIds[0]"
                 #appVisaWorkflow>
             </app-visa-workflow>
@@ -21,7 +40,7 @@
     </div>
 </div>
 <div mat-dialog-actions class="actions">
-    <button mat-raised-button mat-button color="primary" [disabled]="loading"
+    <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()"
         (click)="onSubmit()">{{lang.validate}}</button>
     <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button>
-</div>
\ No newline at end of file
+</div>
diff --git a/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.ts b/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.ts
index eceb3a4a2fb4d881034dc61d4def4649d0f11885..f5ea201140fff904241debb7345e750d70b8149e 100644
--- a/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.ts
+++ b/src/frontend/app/actions/visa-interrupt-action/interrupt-visa-action.component.ts
@@ -6,6 +6,7 @@ import { HttpClient } from '@angular/common/http';
 import { NoteEditorComponent } from '../../notes/note-editor.component';
 import { tap, finalize, catchError } from 'rxjs/operators';
 import { of } from 'rxjs';
+import {FunctionsService} from "../../../service/functions.service";
 
 @Component({
     templateUrl: "interrupt-visa-action.component.html",
@@ -17,16 +18,48 @@ export class InterruptVisaActionComponent implements OnInit {
     lang: any = LANG;
     loading: boolean = false;
 
+    resourcesWarnings: any[] = [];
+    resourcesErrors: any[] = [];
+
+    noResourceToProcess: boolean = null;
+
     @ViewChild('noteEditor', { static: true }) noteEditor: NoteEditorComponent;
 
     constructor(
         public http: HttpClient, 
         private notify: NotificationService, 
         public dialogRef: MatDialogRef<InterruptVisaActionComponent>,
-        @Inject(MAT_DIALOG_DATA) public data: any
+        @Inject(MAT_DIALOG_DATA) public data: any,
+        public functions: FunctionsService
     ) { }
 
-    ngOnInit(): void { }
+    async ngOnInit() {
+        this.loading = true;
+        await this.checkInterruptVisa();
+        this.loading = false;
+    }
+
+    checkInterruptVisa() {
+        this.resourcesErrors = [];
+        this.resourcesWarnings = [];
+
+        return new Promise((resolve, reject) => {
+            this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkInterruptRejectResetVisa', { resources: this.data.resIds })
+                .subscribe((data: any) => {
+                    if (!this.functions.empty(data.resourcesInformations.warning)) {
+                        this.resourcesWarnings = data.resourcesInformations.warning;
+                    }
+
+                    if(!this.functions.empty(data.resourcesInformations.error)) {
+                        this.resourcesErrors = data.resourcesInformations.error;
+                        this.noResourceToProcess = this.resourcesErrors.length === this.data.resIds.length;
+                    }
+                    resolve(true);
+                }, (err: any) => {
+                    this.notify.handleSoftErrors(err);
+                });
+        });
+    }
 
     onSubmit() {
         this.loading = true;
@@ -45,4 +78,8 @@ export class InterruptVisaActionComponent implements OnInit {
             })
         ).subscribe();
     }
+
+    isValidAction() {
+        return !this.noResourceToProcess;
+    }
 }
diff --git a/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.html b/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.html
index 2a1b9b13dfdbf623b0f18355ddad50dd0cb8dfb0..e1ec516307fccaf7181fb2a57bead5fd88e4c53e 100644
--- a/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.html
+++ b/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.html
@@ -11,6 +11,25 @@
                 {{lang.elements}}</b> ?
                 <div *ngIf="data.resIds.length > 1" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;" [innerHTML]="lang.rejectVisaBack"></div>
                 <div *ngIf="data.resIds.length == 1 && appVisaWorkflow !== undefined && appVisaWorkflow.getLastVisaUser() !== ''" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;" [innerHTML]="lang.rejectVisaBackUser + ' <b>' + appVisaWorkflow.getLastVisaUser().labelToDisplay + '</b>'"></div>
+
+            <div *ngIf="resourcesErrors.length > 0" class="alert-message alert-message-danger mailList" role="alert">
+                <p>
+                    {{lang.canNotMakeAction}} :
+                </p>
+                <ul>
+                    <li *ngFor="let ressource of resourcesErrors">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+            <div *ngIf="resourcesWarnings.length > 0" class="alert-message alert-message-info mailList" role="alert">
+                <ul style="margin: 0;padding-bottom: 0px;">
+                    <li *ngFor="let ressource of resourcesWarnings">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+
             <app-visa-workflow *ngIf="data.resIds.length == 1" [adminMode]="false" [resId]="data.resIds[0]" #appVisaWorkflow>
             </app-visa-workflow>
         </div>
@@ -20,7 +39,7 @@
     </div>
 </div>
 <div mat-dialog-actions class="actions">
-    <button mat-raised-button mat-button color="primary" [disabled]="loading"
+    <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()"
         (click)="onSubmit()">{{lang.validate}}</button>
     <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button>
-</div>
\ No newline at end of file
+</div>
diff --git a/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.ts b/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.ts
index f6bdcb4fcd9997a99b87ee87a67dd7ae056ca2ef..c43cba03b8e240460c938aeec0d74dfcd98c038f 100644
--- a/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.ts
+++ b/src/frontend/app/actions/visa-reject-back-to-previous-action/reject-visa-back-to-previous-action.component.ts
@@ -7,6 +7,7 @@ import { NoteEditorComponent } from '../../notes/note-editor.component';
 import { tap, finalize, catchError } from 'rxjs/operators';
 import { of } from 'rxjs';
 import { VisaWorkflowComponent } from '../../visa/visa-workflow.component';
+import {FunctionsService} from "../../../service/functions.service";
 
 @Component({
     templateUrl: "reject-visa-back-to-previous-action.component.html",
@@ -18,6 +19,11 @@ export class RejectVisaBackToPrevousActionComponent implements OnInit {
     lang: any = LANG;
     loading: boolean = false;
 
+    resourcesWarnings: any[] = [];
+    resourcesErrors: any[] = [];
+
+    noResourceToProcess: boolean = null;
+
     @ViewChild('noteEditor', { static: true }) noteEditor: NoteEditorComponent;
     @ViewChild('appVisaWorkflow', { static: false }) appVisaWorkflow: VisaWorkflowComponent;
 
@@ -25,10 +31,37 @@ export class RejectVisaBackToPrevousActionComponent implements OnInit {
         public http: HttpClient, 
         private notify: NotificationService, 
         public dialogRef: MatDialogRef<RejectVisaBackToPrevousActionComponent>,
-        @Inject(MAT_DIALOG_DATA) public data: any
+        @Inject(MAT_DIALOG_DATA) public data: any,
+        public functions: FunctionsService
     ) { }
 
-    ngOnInit() { }
+    async ngOnInit() {
+        this.loading = true;
+        await this.checkRejectVisaBackToPrevious();
+        this.loading = false;
+    }
+
+    checkRejectVisaBackToPrevious() {
+        this.resourcesErrors = [];
+        this.resourcesWarnings = [];
+
+        return new Promise((resolve, reject) => {
+            this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkInterruptRejectResetVisa', { resources: this.data.resIds })
+                .subscribe((data: any) => {
+                    if (!this.functions.empty(data.resourcesInformations.warning)) {
+                        this.resourcesWarnings = data.resourcesInformations.warning;
+                    }
+
+                    if(!this.functions.empty(data.resourcesInformations.error)) {
+                        this.resourcesErrors = data.resourcesInformations.error;
+                        this.noResourceToProcess = this.resourcesErrors.length === this.data.resIds.length;
+                    }
+                    resolve(true);
+                }, (err: any) => {
+                    this.notify.handleSoftErrors(err);
+                });
+        });
+    }
 
     onSubmit() {
         this.loading = true;
@@ -47,4 +80,8 @@ export class RejectVisaBackToPrevousActionComponent implements OnInit {
             })
         ).subscribe();
     }
+
+    isValidAction() {
+        return !this.noResourceToProcess;
+    }
 }
diff --git a/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.html b/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.html
index 80131ffd6e2e6ee5d8fa4e7f6b0d84e48e114741..fef6bfd807f14055c498e1d5f49c619c5d576cc8 100644
--- a/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.html
+++ b/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.html
@@ -13,6 +13,25 @@
                 [innerHTML]="lang.resetVisaWorkflowUser + ' <b>' + appVisaWorkflow.getFirstVisaUser().labelToDisplay + '</b>'"></div>
             <div *ngIf="data.resIds.length > 1" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;"
                 [innerHTML]="lang.resetVisaWorkflow"></div>
+
+            <div *ngIf="resourcesErrors.length > 0" class="alert-message alert-message-danger mailList" role="alert">
+                <p>
+                    {{lang.canNotMakeAction}} :
+                </p>
+                <ul>
+                    <li *ngFor="let ressource of resourcesErrors">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+            <div *ngIf="resourcesWarnings.length > 0" class="alert-message alert-message-info mailList" role="alert">
+                <ul style="margin: 0;padding-bottom: 0px;">
+                    <li *ngFor="let ressource of resourcesWarnings">
+                        <b>{{ressource.alt_identifier}}</b> : {{lang[ressource.reason]}}
+                    </li>
+                </ul>
+            </div>
+
             <app-visa-workflow *ngIf="data.resIds.length == 1" [adminMode]="false" [resId]="data.resIds[0]" #appVisaWorkflow>
                 </app-visa-workflow>
         </div>
@@ -22,7 +41,7 @@
     </div>
 </div>
 <div mat-dialog-actions class="actions">
-    <button mat-raised-button mat-button color="primary" [disabled]="loading"
+    <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()"
         (click)="onSubmit()">{{lang.validate}}</button>
     <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button>
-</div>
\ No newline at end of file
+</div>
diff --git a/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.ts b/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.ts
index 0476fc8194c819986cf3bf861937ccefee854814..1046030de4246b8f80023315d4a4857acba75652 100644
--- a/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.ts
+++ b/src/frontend/app/actions/visa-reset-action/reset-visa-action.component.ts
@@ -7,6 +7,7 @@ import { NoteEditorComponent } from '../../notes/note-editor.component';
 import { tap, finalize, catchError } from 'rxjs/operators';
 import { of } from 'rxjs';
 import { VisaWorkflowComponent } from '../../visa/visa-workflow.component';
+import {FunctionsService} from "../../../service/functions.service";
 
 @Component({
     templateUrl: "reset-visa-action.component.html",
@@ -17,6 +18,11 @@ export class ResetVisaActionComponent implements OnInit {
     lang: any = LANG;
     loading: boolean = false;
 
+    resourcesWarnings: any[] = [];
+    resourcesErrors: any[] = [];
+
+    noResourceToProcess: boolean = null;
+
     @ViewChild('noteEditor', { static: true }) noteEditor: NoteEditorComponent;
     @ViewChild('appVisaWorkflow', { static: false }) appVisaWorkflow: VisaWorkflowComponent;
 
@@ -24,10 +30,37 @@ export class ResetVisaActionComponent implements OnInit {
         public http: HttpClient, 
         private notify: NotificationService, 
         public dialogRef: MatDialogRef<ResetVisaActionComponent>,
-        @Inject(MAT_DIALOG_DATA) public data: any
+        @Inject(MAT_DIALOG_DATA) public data: any,
+        public functions: FunctionsService
     ) { }
 
-    ngOnInit(): void { }
+    async ngOnInit() {
+        this.loading = true;
+        await this.checkResetVisa();
+        this.loading = false;
+    }
+
+    checkResetVisa() {
+        this.resourcesErrors = [];
+        this.resourcesWarnings = [];
+
+        return new Promise((resolve, reject) => {
+            this.http.post('../../rest/resourcesList/users/' + this.data.userId + '/groups/' + this.data.groupId + '/baskets/' + this.data.basketId + '/actions/' + this.data.action.id + '/checkInterruptRejectResetVisa', { resources: this.data.resIds })
+                .subscribe((data: any) => {
+                    if (!this.functions.empty(data.resourcesInformations.warning)) {
+                        this.resourcesWarnings = data.resourcesInformations.warning;
+                    }
+
+                    if(!this.functions.empty(data.resourcesInformations.error)) {
+                        this.resourcesErrors = data.resourcesInformations.error;
+                        this.noResourceToProcess = this.resourcesErrors.length === this.data.resIds.length;
+                    }
+                    resolve(true);
+                }, (err: any) => {
+                    this.notify.handleSoftErrors(err);
+                });
+        });
+    }
 
     onSubmit() {
         this.loading = true;
@@ -46,4 +79,8 @@ export class ResetVisaActionComponent implements OnInit {
             })
         ).subscribe();
     }
+
+    isValidAction() {
+        return !this.noResourceToProcess;
+    }
 }
diff --git a/src/frontend/app/administration/contact/page/form/contacts-form.component.html b/src/frontend/app/administration/contact/page/form/contacts-form.component.html
index 46078a175ce04bbe73dcc762aaf7d5fda885869c..a23c9b1095ebecb55091d7cf919484641e6a47d9 100644
--- a/src/frontend/app/administration/contact/page/form/contacts-form.component.html
+++ b/src/frontend/app/administration/contact/page/form/contacts-form.component.html
@@ -122,21 +122,31 @@
                                     </mat-form-field>
                                 </ng-container>
                                 <ng-container *ngIf="field.type === 'radio'">
-                                    <label class="labelCustom">{{field.label}}</label>
+                                    <label class="labelCustom">{{field.label}} <ng-container *ngIf="field.required">*</ng-container></label>
                                     <mat-radio-group class="radio-form" color="primary" [formControl]="field.control">
                                         <mat-radio-button *ngFor="let value of field.values" [value]="value.id">
                                             {{value.label}}
                                         </mat-radio-button>
                                     </mat-radio-group>
+                                    <i *ngIf="field.filling" style="position:absolute;height: auto;padding-right: 10px;right: 0px;z-index: 1;top: 50%;transform: translateY(-50%);"
+                                            [title]="lang.targetFillingField" [style.color]="fillingRate.color"
+                                            class="fas fa-circle rate"></i>
+                                    <mat-error *ngIf="field.control.status!=='VALID'  && field.control.touched">
+                                        {{getErrorMsg(field.control.errors)}}</mat-error>
                                 </ng-container>
                                 <ng-container *ngIf="field.type === 'checkbox'">
-                                    <label class="labelCustom">{{field.label}}</label>
+                                    <label class="labelCustom">{{field.label}} <ng-container *ngIf="field.required">*</ng-container></label>
                                     <mat-selection-list #shoes class="checkbox-form" [formControl]="field.control">
                                         <mat-list-option *ngFor="let value of field.values" [value]="value.id"
                                             color="primary" checkboxPosition="before">
                                             {{value.label}}
                                         </mat-list-option>
                                     </mat-selection-list>
+                                    <i *ngIf="field.filling" style="position:absolute;height: auto;padding-right: 10px;right: 0px;z-index: 1;top: 50%;transform: translateY(-50%);"
+                                            [title]="lang.targetFillingField" [style.color]="fillingRate.color"
+                                            class="fas fa-circle rate"></i>
+                                    <mat-error *ngIf="field.control.status!=='VALID'  && field.control.touched">
+                                        {{getErrorMsg(field.control.errors)}}</mat-error>
                                 </ng-container>
                             </p>
                             <button *ngIf="field.display" [disabled]="!canDelete(field)" mat-icon-button matSuffix
diff --git a/src/frontend/app/administration/contact/page/form/contacts-form.component.scss b/src/frontend/app/administration/contact/page/form/contacts-form.component.scss
index 88db748170b17ef780b277a0f2caed7f2e1314f4..b51ecb17334aece0b0289afbe20c99818e36ad80 100644
--- a/src/frontend/app/administration/contact/page/form/contacts-form.component.scss
+++ b/src/frontend/app/administration/contact/page/form/contacts-form.component.scss
@@ -1,110 +1,117 @@
 @import "../../../../../css/vars.scss";
 
 .contact-item {
-  height: auto !important;
+    height: auto !important;
 }
 
 .multipleUnits div:nth-child(1) {
-  display: inline-grid !important;
-  width: 50%;
+    display: inline-grid !important;
+    width: 50%;
 }
 
 .multipleUnits div:nth-child(2) {
-  display: inline-grid !important;
-  width: 50%;
+    display: inline-grid !important;
+    width: 50%;
 }
 
 .unitTitle {
-  display: flex;
-  color: $primary;
+    display: flex;
+    color: $primary;
 }
 
 .contact-address {
-  cursor: pointer;
-  color: #337ab7;
+    cursor: pointer;
+    color: #337ab7;
 
-  &:hover {
-    .contact-content {
-      text-decoration: underline;
+    &:hover {
+        .contact-content {
+            text-decoration: underline;
+        }
     }
-  }
+}
+
+.contact-content {
+    position: relative;
 }
 
 .smallInput {
-  font-size: 11px;
-  padding-left: 20px;
-  padding-right: 20px;
-  .mat-button {
-    width: 30px;
-    height: 25px;
-    color: $primary;
+    font-size: 11px;
+    padding-left: 20px;
+    padding-right: 20px;
+
+    .mat-button {
+        width: 30px;
+        height: 25px;
+        color: $primary;
+
+        ::ng-deep.mat-button-wrapper {
+            display: flex;
+            line-height: initial;
+            align-items: center;
+        }
+    }
 
-    ::ng-deep.mat-button-wrapper {
-      display: flex;
-      line-height: initial;
-      align-items: center;
+    ::ng-deep.mat-form-field-infix {
+        padding: 0px;
+        padding-bottom: 5px;
     }
-  }
-  ::ng-deep.mat-form-field-infix {
-    padding: 0px;
-    padding-bottom: 5px;
-  }
 }
+
 .radio-form {
-  display: flex;
+    display: flex;
 
-  .mat-radio-button {
-    flex: 1;
-  }
+    .mat-radio-button {
+        flex: 1;
+    }
 }
 
 .checkbox-form {
-  overflow: auto;
-  max-height: 200px;
+    overflow: auto;
+    max-height: 200px;
 }
 
 .loading {
-  display: flex;
-  height: 100%;
+    display: flex;
+    height: 100%;
 }
 
 .fillingBar {
-  ::ng-deep .mat-progress-bar-buffer {
-    background: #e4e8eb;
-  }
+    ::ng-deep .mat-progress-bar-buffer {
+        background: #e4e8eb;
+    }
 }
 
 .rate {
-  font-size: 10px;
-  text-align: right;
+    font-size: 10px;
+    text-align: right;
 }
 
 .fillingBar.mat-warn {
-  ::ng-deep.mat-progress-bar-fill::after {
-    background-color: #e81c2b;
-  }
+    ::ng-deep.mat-progress-bar-fill::after {
+        background-color: #e81c2b;
+    }
 }
 
 .fillingBar.mat-primary {
-  ::ng-deep.mat-progress-bar-fill::after {
-    background-color: #f4891e;
-  }
+    ::ng-deep.mat-progress-bar-fill::after {
+        background-color: #f4891e;
+    }
 }
 
 .fillingBar.mat-accent {
-  ::ng-deep.mat-progress-bar-fill::after {
-    background-color: #0aa34f;
-  }
+    ::ng-deep.mat-progress-bar-fill::after {
+        background-color: #0aa34f;
+    }
 }
 
 .mat-error {
-  font-size: 10px;
-  text-align: right;
-  font-weight: bold;
+    font-size: 10px;
+    text-align: right;
+    font-weight: bold;
 }
 
 .labelCustom {
-  color: rgba(0, 0, 0, 0.54);
-  transform: scale(0.75);
-  font-weight: 400;
-}
+    color: rgba(0, 0, 0, 0.54);
+    transform: scale(0.75);
+    font-weight: 400;
+}
\ No newline at end of file
diff --git a/src/frontend/app/administration/history/history-administration.component.html b/src/frontend/app/administration/history/history-administration.component.html
index 8dc4e5f7e4ed7c8a886d72e062470d289f1db9a8..04e33eb5ac9b33bd2b91a1602a621d8d34825064 100755
--- a/src/frontend/app/administration/history/history-administration.component.html
+++ b/src/frontend/app/administration/history/history-administration.component.html
@@ -1,144 +1,162 @@
-<div class="admin-container" [class.admin-is-mobile]="appService.getViewMode()">
-    <mat-sidenav-container autosize class="admin-sidenav-container" >
-        <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            [opened]="appService.getViewMode() ? false : true">
-            <menu-shortcut></menu-shortcut>
-            <menu-nav></menu-nav>
-        </mat-sidenav>
-        <mat-sidenav-content>
-            <div *ngIf="loading" style="display:flex;height:100%;">
-                <mat-spinner style="margin:auto;"></mat-spinner>
+<mat-sidenav-container autosize class="maarch-container">
+    <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()"
+        fixedTopGap="56" [opened]="appService.getViewMode() ? false : true">
+        <header-panel [snavLeft]="snav"></header-panel>
+        <menu-shortcut></menu-shortcut>
+        <menu-nav></menu-nav>
+        <mat-nav-list>
+            <a mat-list-item *ngFor="let menu of subMenus" [class.active]="menu.current" [routerLink]="menu.route">
+                <mat-icon color="primary" mat-list-icon [class]="menu.icon"></mat-icon>
+                <p mat-line>
+                    {{menu.label}}
+                </p>
+            </a>
+        </mat-nav-list>
+        <mat-divider></mat-divider>
+    </mat-sidenav>
+    <mat-sidenav-content>
+        <div class="bg-head">
+            <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
+                <div class="bg-head-title-label">
+                    <header-left [snavLeft]="snav"></header-left>
+                </div>
+                <div class="bg-head-title-tool">
+                    <header-right></header-right>
+                </div>
             </div>
-            <mat-card *ngIf="!loading" class="card-app-content">
-                <mat-tab-group (selectedIndexChange)="_setDataSource($event)">
-                    <mat-tab label="{{lang.history}}" *ngIf="accessHistory">
-                        <mat-card *ngIf="!loading" class="card-app-content">
-                            <div class="alert alert-warning" role="alert" [innerHTML]="lang.limitDataReached" *ngIf="limitExceeded">
-                            </div>
-                            <div class="row">
-                                <div class="col-md-6 col-xs-6">
-                                    <mat-form-field>
-                                        <input matInput (keyup)="applyFilter($event.target.value, 'normal')" placeholder="{{lang.filterBy}}">
-                                    </mat-form-field>
-                                </div>
-                                <div class="col-md-6 col-xs-6">
-                                    <mat-paginator #paginator [length]="100" [hidePageSize]="true" [pageSize]="10">
-                                    </mat-paginator>
-                                </div>
-                            </div>
-
-                            <div class="row">
-                                <div class="col-sm-6" style="padding-top:10px;">
-                                    <mat-form-field>
-                                        <input matInput [(ngModel)]="startDate" [max]="endDate" [matDatepicker]="pickerStart" placeholder="{{lang.since}}" (dateChange)="refreshHistory('normal')"
-                                            (focus)="pickerStart.open()">
-                                        <mat-datepicker-toggle matSuffix [for]="pickerStart"></mat-datepicker-toggle>
-                                        <mat-datepicker #pickerStart touchUi="true" [startAt]="startDate"></mat-datepicker>
-                                    </mat-form-field>
-
-                                </div>
-                                <div class="col-sm-6" style="padding-top:10px;">
-                                    <mat-form-field>
-                                        <input matInput [(ngModel)]="endDate" [min]="startDate" [matDatepicker]="pickerEnd" placeholder="{{lang.until}}" (dateChange)="refreshHistory('normal')"
-                                            (focus)="pickerEnd.open()">
-                                        <mat-datepicker-toggle matSuffix [for]="pickerEnd"></mat-datepicker-toggle>
-                                        <mat-datepicker #pickerEnd touchUi="true" [startAt]="endDate"></mat-datepicker>
-                                    </mat-form-field>
-                                </div>
-                            </div>
-                            <mat-table #table [dataSource]="dataSource" matSort matSortActive="event_date" #sort="matSort" matSortDirection="desc">
-                                <ng-container matColumnDef="event_date">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:1;">{{lang.date}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" style="flex:1;">{{element.event_date | date : "dd/MM/y HH:mm"}}</mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="event_type">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()">{{lang.event}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()"> {{element.event_type}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="user_id">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()">{{lang.user}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()"> {{element.user_id}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="info">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:3;">{{lang.description}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" style="flex:3;"> {{element.info}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="remote_ip">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()">{{lang.ip}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" style="flex:1;" [class.hide-for-mobile]="appService.getViewMode()"> {{element.remote_ip}} </mat-cell>
-                                </ng-container>
-                                <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
-                                <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
-                            </mat-table>
-                            <div class="mat-paginator" style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">{{data.length}} {{lang.entries}}</div>
-                        </mat-card>
-                    </mat-tab>
-                    <mat-tab label="{{lang.historyBatch}}" *ngIf="accessBatchHistory">
-                        <mat-card *ngIf="!loading" class="card-app-content">
-                            <div class="alert alert-warning" role="alert" [innerHTML]="lang.limitDataReached" *ngIf="limitExceeded"></div>
-                            <div class="row">
-                                <div class="col-md-6 col-xs-6">
-                                    <mat-form-field>
-                                        <input matInput (keyup)="applyFilter($event.target.value, 'batch')" placeholder="{{lang.filterBy}}">
-                                    </mat-form-field>
-                                </div>
-                                <div class="col-md-6 col-xs-6">
-                                    <mat-paginator #batchPaginator [length]="100" [hidePageSize]="true" [pageSize]="10">
-                                    </mat-paginator>
-                                </div>
-                            </div>
-                            <div class="row">
-                                <div class="col-sm-6" style="padding-top:10px;">
-                                    <mat-form-field>
-                                        <input matInput [(ngModel)]="batchStartDate" [max]="batchEndDate" [matDatepicker]="pickerStart" placeholder="{{lang.since}}"
-                                            (dateChange)="refreshHistory('batch')" (focus)="pickerStart.open()">
-                                        <mat-datepicker-toggle matSuffix [for]="pickerStart"></mat-datepicker-toggle>
-                                        <mat-datepicker #pickerStart touchUi="true" [startAt]="batchStartDate"></mat-datepicker>
-                                    </mat-form-field>
-                                </div>
-                                <div class="col-sm-6" style="padding-top:10px;">
-                                    <mat-form-field>
-                                        <input matInput [(ngModel)]="batchEndDate" [min]="batchStartDate" [matDatepicker]="pickerEnd" placeholder="{{lang.until}}"
-                                            (dateChange)="refreshHistory('batch')" (focus)="pickerEnd.open()">
-                                        <mat-datepicker-toggle matSuffix [for]="pickerEnd"></mat-datepicker-toggle>
-                                        <mat-datepicker #pickerEnd touchUi="true" [startAt]="batchEndDate"></mat-datepicker>
-                                    </mat-form-field>
-                                </div>
-                            </div>
-                            <mat-table #table [dataSource]="batchDataSource" #batchSort="matSort" matSort matSortActive="event_date" matSortDirection="desc">
-                                <ng-container matColumnDef="event_date">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.date}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element">{{element.event_date | date : "dd/MM/y HH:mm"}}</mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="total_processed">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.totalProcessed}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.total_processed}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="total_errors">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.totalErrors}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.total_errors}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="info">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.description}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element"> {{element.info}} </mat-cell>
-                                </ng-container>
-                                <ng-container matColumnDef="module_name">
-                                    <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.module}}</mat-header-cell>
-                                    <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.module_name}} </mat-cell>
+            <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
+                <div style="display: grid;grid-template-columns: repeat(2, 1fr);grid-gap: 10px;width: 100%;">
+                    <mat-form-field (click)="startPicker.open()" style="cursor:pointer;" class="dateFilter">
+                        <mat-label style="color:white;">{{lang.since}}
+                        </mat-label>
+                        <input [(ngModel)]="startDateFilter" matInput [matDatepicker]="startPicker"
+                            [placeholder]="lang.since" [max]="endDateFilter" readonly style="cursor:pointer;"
+                            (dateChange)="filterStartDate()">
+                        <mat-datepicker-toggle matSuffix [for]="startPicker" *ngIf="!startDateFilter">
+                        </mat-datepicker-toggle>
+                        <mat-datepicker [touchUi]="appService.getViewMode()" #startPicker>
+                        </mat-datepicker>
+                        <button mat-button color="warn" matSuffix mat-icon-button *ngIf="startDateFilter"
+                            (click)="$event.stopPropagation();startDateFilter = '';filterStartDate()" [title]="lang.eraseValue">
+                            <mat-icon color="warn" class="fa fa-calendar-times">
+                            </mat-icon>
+                        </button>
+                    </mat-form-field>
+                    <mat-form-field (click)="endPicker.open()" style="cursor:pointer;" class="dateFilter">
+                        <mat-label style="color:white;">{{lang.until}}
+                        </mat-label>
+                        <input [(ngModel)]="endDateFilter" matInput [matDatepicker]="endPicker"
+                            [placeholder]="lang.until" [min]="startDateFilter" readonly style="cursor:pointer;"
+                            (dateChange)="filterEndDate()">
+                        <mat-datepicker-toggle matSuffix [for]="endPicker" *ngIf="!endDateFilter">
+                        </mat-datepicker-toggle>
+                        <mat-datepicker [touchUi]="appService.getViewMode()" #endPicker>
+                        </mat-datepicker>
+                        <button mat-button color="warn" matSuffix mat-icon-button *ngIf="endDateFilter"
+                            (click)="$event.stopPropagation();endDateFilter = '';filterEndDate()" [title]="lang.eraseValue">
+                            <mat-icon color="warn" class="fa fa-calendar-times">
+                            </mat-icon>
+                        </button>
+                    </mat-form-field>
+                </div>
+            </div>
+        </div>
+        <div class="container" [class.fullContainer]="appService.getViewMode()">
+            <div class="container-content">
+                <div class="example-loading-shade" *ngIf="isLoadingResults">
+                    <mat-spinner *ngIf="isLoadingResults"></mat-spinner>
+                </div>
+                <div class="table-head">
+                    <div class="table-head-result">
+                        <mat-form-field floatLabel="never" style="font-size: 13px;">
+                            <input type="text" #autoCompleteInput [matAutocomplete]="auto" [placeholder]="lang.filterBy"
+                                matInput [formControl]="searchHistory" (click)="$event.stopPropagation()"
+                                maxlength="128">
+                            <mat-autocomplete #auto="matAutocomplete" (optionSelected)="addItemFilter($event.option)"
+                                (opened)="initFilterListHistory()">
+                                <mat-option disabled *ngIf="loadingFilters">
+                                    <div style="display: flex;justify-content: center;">
+                                        <mat-spinner diameter="35"></mat-spinner>
+                                    </div>
+                                </mat-option>
+                                <ng-container *ngIf="filterList!==null && !loadingFilters">
+                                    <ng-container *ngFor="let keyVal of filterList | keyvalue">
+                                        <mat-optgroup *ngIf="(filteredList[keyVal.key] | async)?.length > 0"
+                                            [label]="lang[keyVal.key]" class="filterList">
+                                            <mat-option [id]="keyVal.key"
+                                                [style.color]="!filter.used ? filterColor[keyVal.key] : ''"
+                                                *ngFor="let filter of filteredList[keyVal.key] | async | sortBy : 'label'"
+                                                [value]="filter" [disabled]="filter.used">
+                                                {{filter.label}}
+                                            </mat-option>
+                                        </mat-optgroup>
+                                    </ng-container>
                                 </ng-container>
-                                <mat-header-row *matHeaderRowDef="batchDisplayedColumns"></mat-header-row>
-                                <mat-row *matRowDef="let row; columns: batchDisplayedColumns;"></mat-row>
-                            </mat-table>
-                        </mat-card>
-                    </mat-tab>
-                </mat-tab-group>
-            </mat-card>
-        </mat-sidenav-content>
-        <mat-sidenav #snav2 [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            position='end' [opened]="appService.getViewMode() ? false : false">
-            <mat-nav-list>
-                <h3 mat-subheader>Actions</h3>
-            </mat-nav-list>
-        </mat-sidenav>
-    </mat-sidenav-container>
-</div>
\ No newline at end of file
+
+                            </mat-autocomplete>
+                        </mat-form-field>
+                    </div>
+                    <div class="table-head-tool">
+                        <mat-paginator #paginatorHistoryList [length]="resultsLength" [hidePageSize]="true"
+                            [pageSize]="10" class="paginatorResultList"></mat-paginator>
+                    </div>
+                </div>
+                <div style="height:90%;overflow:auto;position:absolute;width:100%;">
+                    <div class="filterBadges">
+                        <ng-container *ngFor="let keyVal of filterUsed | keyvalue">
+                            <ng-container *ngIf="['startDate','endDate'].indexOf(keyVal.key) === -1">
+                                <span *ngFor="let filter of filterUsed[keyVal.key]; let i=index;" class="label"
+                                    [style.background]="filterColor[keyVal.key]" [title]="lang[keyVal.key]"
+                                    (click)="removeItemFilter(filter,keyVal.key,i)">{{filter.label}}
+                                    <i class="fa fa-times-circle"></i></span>
+                            </ng-container>
+                        </ng-container>
+                    </div>
+                    <mat-table id="history-list" #tableHistoryListSort="matSort" [dataSource]="data" matSort
+                        matSortActive="event_date" matSortDirection="desc" style="width:100%;">
+                        <ng-container matColumnDef="event_date">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.event}}</mat-header-cell>
+                            <mat-cell mat-cell *matCellDef="let element"
+                                [class.hide-for-mobile]="appService.getViewMode()"
+                                [title]="element.event_date | fullDate">
+                                {{element.event_date  | timeAgo : 'full' | ucfirst}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="userLabel">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.user | ucfirst}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.userLabel}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="info">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()" style="flex: 2;">{{lang.information}}
+                            </mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"
+                                style="flex: 2;">
+                                {{element.info}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="remote_ip">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.ip}}
+                            </mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.remote_ip}} </mat-cell>
+                        </ng-container>
+                        <mat-header-row *matHeaderRowDef="displayedColumnsHistory"></mat-header-row>
+                        <mat-row *matRowDef="let row; columns: displayedColumnsHistory;">
+                        </mat-row>
+                    </mat-table>
+                    <div class="mat-paginator"
+                        style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">
+                        {{resultsLength}} {{lang.elements}}</div>
+                </div>
+                <div class="table-head">
+                </div>
+            </div>
+        </div>
+    </mat-sidenav-content>
+    <mat-sidenav #snav2 [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()"
+        fixedTopGap="56" position='end' [opened]="appService.getViewMode() ? false : false">
+    </mat-sidenav>
+</mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/administration/history/history-administration.component.scss b/src/frontend/app/administration/history/history-administration.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d72907097a8ff943af1669f7434e98f0ba62e4e7
--- /dev/null
+++ b/src/frontend/app/administration/history/history-administration.component.scss
@@ -0,0 +1,54 @@
+@import '../../../css/vars.scss';
+
+.active,
+.active:hover,
+.active:active,
+.active:focus {
+    color: $primary;
+    border-left: solid 5px $primary;
+    background: rgba($primary, 0.14);
+}
+
+
+.paginatorResultList {
+    ::ng-deep.mat-paginator-range-label {
+        justify-content: flex-end;
+        display: flex;
+    }
+}
+
+.filterList {
+    ::ng-deep.mat-optgroup-label {
+        color: $primary;
+        position: sticky;
+        top: 0px;
+        background: white !important;
+        z-index: 1;
+    }
+}
+
+.label {
+    cursor: pointer;
+    margin: 5px;
+}
+
+.bg-head-content {
+    ::ng-deep .mat-focused .mat-form-field-label {
+        /*change color of label*/
+        color: white !important;
+    }
+
+    ::ng-deep.mat-form-field-underline {
+        /*change color of underline*/
+        background-color: white !important;
+    }
+
+    ::ng-deep.mat-form-field-ripple {
+        /*change color of underline when focused*/
+        background-color: white !important;
+    }
+
+    .mat-icon,.mat-datepicker-toggle {
+        color:white;
+    }
+}
\ No newline at end of file
diff --git a/src/frontend/app/administration/history/history-administration.component.ts b/src/frontend/app/administration/history/history-administration.component.ts
index 4a656d05dcbeaf561d5109a5ef81843d9f122484..1fd905fbc224776a55878afc72347485cab6a88a 100755
--- a/src/frontend/app/administration/history/history-administration.component.ts
+++ b/src/frontend/app/administration/history/history-administration.component.ts
@@ -1,184 +1,293 @@
-import { Component, OnInit, ViewChild }  from '@angular/core';
-import { HttpClient }                                       from '@angular/common/http';
-import { MatPaginator } from '@angular/material/paginator';
+import { Component, OnInit, ViewChild, EventEmitter, ElementRef } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { LANG } from '../../translate.component';
+import { NotificationService } from '../../notification.service';
+import { HeaderService } from '../../../service/header.service';
 import { MatSidenav } from '@angular/material/sidenav';
-import { MatSort } from '@angular/material/sort';
-import { MatTableDataSource } from '@angular/material/table';
-import { LANG }                                             from '../../translate.component';
-import { HeaderService }        from '../../../service/header.service';
 import { AppService } from '../../../service/app.service';
-
-declare function $j(selector: any): any;
+import { Observable, merge, Subject, of as observableOf, of } from 'rxjs';
+import { MatPaginator, MatSort, MatDialog } from '@angular/material';
+import { takeUntil, startWith, switchMap, map, catchError, filter, exhaustMap, tap, debounceTime, distinctUntilChanged, finalize } from 'rxjs/operators';
+import { ConfirmComponent } from '../../../plugins/modal/confirm.component';
+import { FormControl } from '@angular/forms';
+import { FunctionsService } from '../../../service/functions.service';
+import { LatinisePipe } from 'ngx-pipes';
 
 @Component({
+    selector: 'contact-list',
     templateUrl: "history-administration.component.html",
+    styleUrls: ['history-administration.component.scss'],
     providers: [AppService]
 })
 export class HistoryAdministrationComponent implements OnInit {
 
-    @ViewChild('snav', { static: true }) public  sidenavLeft   : MatSidenav;
-    @ViewChild('snav2', { static: true }) public sidenavRight  : MatSidenav;
+    @ViewChild('snav', { static: true }) public sidenavLeft: MatSidenav;
+    @ViewChild('snav2', { static: true }) public sidenavRight: MatSidenav;
 
-    lang                            : any       = LANG;
-    loading                         : boolean   = false;
-    limitExceeded                   : boolean   = false;
-    batchLimitExceeded              : boolean   = false;
+    lang: any = LANG;
+    loading: boolean = false;
 
-    data                            : any[]     = [];
-    batchData                       : any[]     = [];
-    startDate                       : Date      = new Date();
-    endDate                         : Date      = new Date();
-    batchStartDate                  : Date      = new Date();
-    batchEndDate                    : Date      = new Date();
+    filtersChange = new EventEmitter();
 
+    data: any;
 
-    dataSource          = new MatTableDataSource(this.data);
-    batchDataSource     = new MatTableDataSource(this.batchData);
-    displayedColumns    = ['event_date', 'event_type', 'user_id', 'info', 'remote_ip'];
-    batchDisplayedColumns = ['event_date', 'total_processed', 'total_errors', 'info', 'module_name'];
+    displayedColumnsHistory: string[] = ['event_date', 'userLabel', 'info', 'remote_ip'];
 
-    accessBatchHistory              : boolean   = true;
-    accessHistory                   : boolean   = true;
+    isLoadingResults = true;
+    routeUrl: string = '../../rest/history';
+    resultListDatabase: HistoryListHttpDao | null;
+    resultsLength = 0;
 
+    searchHistory = new FormControl();
+    startDateFilter: any = '';
+    endDateFilter: any = '';
+    filterUrl: string = '';
+    filterList: any = null;
+    filteredList: any = {};
+    filterUsed: any = {};
 
-    @ViewChild('paginator', { static: false }) paginator: MatPaginator;
-    @ViewChild('batchPaginator', { static: false }) batchPaginator: MatPaginator;
-    @ViewChild('sort', { static: false }) sort: MatSort;
-    @ViewChild('batchSort', { static: false }) batchSort: MatSort;
-    applyFilter(filterValue: string, historyType : string) {
-        filterValue = filterValue.trim();
-        filterValue = filterValue.toLowerCase();
-        if(historyType == 'normal'){
-            this.dataSource.filter = filterValue;
-        } else {
-            this.batchDataSource.filter = filterValue
-        }        
-    }
+    filterColor = {
+        startDate: '#b5cfd8',
+        endDate: '#7393a7',
+        actions: '#7d5ba6',
+        systemActions: '#d6716f',
+        users: '#009dc5',
+    };
+
+    loadingFilters: boolean = true;
+
+    @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
+    @ViewChild('tableHistoryListSort', { static: true }) sort: MatSort;
+    @ViewChild('autoCompleteInput', { static: true }) autoCompleteInput: ElementRef;
+
+    private destroy$ = new Subject<boolean>();
+
+    subMenus: any[] = [
+        {
+            icon: 'fa fa-history',
+            route: '/administration/history',
+            label: this.lang.history,
+            current: true
+        },
+        {
+            icon: 'fa fa-history',
+            route: '/administration/history-batch',
+            label: this.lang.historyBatch,
+            current: false
+        }
+    ];
 
     constructor(
-        public http: HttpClient, 
+        public http: HttpClient,
+        private notify: NotificationService,
         private headerService: HeaderService,
-        public appService: AppService
-    ) {
-        $j("link[href='merged_css.php']").remove();
+        public appService: AppService,
+        public dialog: MatDialog,
+        public functions: FunctionsService,
+        private latinisePipe: LatinisePipe) { }
 
-        this.startDate.setHours(0,0,0,0);
-        this.startDate.setMonth(this.endDate.getMonth()-1);
-        this.endDate.setHours(23,59,59,59);
+    ngOnInit(): void {
+        this.loading = true;
+        this.initHistoryList();
+    }
+
+    initHistoryList() {
+        this.resultListDatabase = new HistoryListHttpDao(this.http);
+        this.paginator.pageIndex = 0;
+        this.sort.active = 'event_date';
+        this.sort.direction = 'desc';
+        this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
 
-        this.batchStartDate.setHours(0,0,0,0);
-        this.batchStartDate.setMonth(this.endDate.getMonth()-1);
-        this.batchEndDate.setHours(23,59,59,59);
+        // When list is refresh (sort, page, filters)
+        merge(this.sort.sortChange, this.paginator.page, this.filtersChange)
+            .pipe(
+                takeUntil(this.destroy$),
+                startWith({}),
+                switchMap(() => {
+                    this.isLoadingResults = true;
+                    return this.resultListDatabase!.getRepoIssues(
+                        this.sort.active, this.sort.direction, this.paginator.pageIndex, this.routeUrl, this.filterUrl);
+                }),
+                map(data => {
+                    this.isLoadingResults = false;
+                    data = this.processPostData(data);
+                    this.resultsLength = data.count;
+                    this.headerService.setHeader(this.lang.administration + ' ' + this.lang.history.toLowerCase(), '', '');
+                    return data.history;
+                }),
+                catchError((err: any) => {
+                    this.notify.handleErrors(err);
+                    this.isLoadingResults = false;
+                    return observableOf([]);
+                })
+            ).subscribe(data => this.data = data);
     }
 
-    ngOnInit(): void {
-        this.headerService.setHeader(this.lang.administration + ' ' + this.lang.history);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+    processPostData(data: any) {
+        data.history = data.history.map((item: any) => {
+            return {
+                ...item,
+                userLabel : !this.functions.empty(item.userLabel) ? item.userLabel : this.lang.userDeleted
+            }
+        })
+        return data;
+    }
 
-        this.loading = true;
 
-        this.http.get('../../rest/histories', {params: {"startDate" : (this.startDate.getTime() / 1000).toString(), "endDate" : (this.endDate.getTime() / 1000).toString()}})
-            .subscribe((data: any) => {
-                this.data = data['histories'];
-                this.limitExceeded = data['limitExceeded'];
-                this.loading = false;
-                setTimeout(() => {
-                    this.accessHistory = true;
-                    this.dataSource = new MatTableDataSource(this.data);
-                    this.dataSource.paginator = this.paginator;
-                    this.dataSource.sort = this.sort;
-                }, 0);
-            }, (data: any) => {
-                if(data['error'].errors == 'Service forbidden'){
-                        this.loading = false;
-                        this.accessHistory = false;
-                } else {
-                    location.href = "index.php";
-                }                
-            });
+    refreshDao() {
+        this.paginator.pageIndex = 0;
+        this.filtersChange.emit();
+    }
 
-        this.http.get('../../rest/batchHistories', {params: {"startDate" : (this.batchStartDate.getTime() / 1000).toString(), "endDate" : (this.batchEndDate.getTime() / 1000).toString()}})
-            .subscribe((data: any) => {
-                this.batchData = data['batchHistories'];
-                this.batchLimitExceeded = data['limitExceeded'];
-                this.loading = false;
-                setTimeout(() => {
-                    this.accessBatchHistory = true;
-                    this.batchDataSource = new MatTableDataSource(this.batchData);
-                    this.batchDataSource.paginator = this.batchPaginator;
-                    this.batchDataSource.sort = this.batchSort;
-                }, 0);
-            }, (data: any) => {
-                if(data['error'].errors == 'Service forbidden'){
-                        this.loading = false
-                        this.accessBatchHistory = false;
-                } else {
-                    location.href = "index.php";
-                }
-                
-            });
-            
+    initFilterListHistory() {
+
+        if (this.filterList === null) {
+            this.filterList = {};
+            this.loadingFilters = true;
+            this.http.get("../../rest/history/availableFilters").pipe(
+                map((data: any) => {
+                    let deletedActions = data.actions.filter((action: any) => action.label === null).map((action: any) => action.id);
+                    let deletedUser = data.users.filter((user: any) => user.label === null).map((user: any) => user.login);
+
+                    data.actions = data.actions.filter((action: any) => action.label !== null);
+                    if (deletedActions.length > 0) {
+                        data.actions.push({
+                            id: deletedActions,
+                            label: this.lang.actionDeleted
+                        });
+                    }
+
+                    data.users = data.users.filter((user: any) => user.label !== null);
+
+                    if (deletedUser.length > 0) {
+                        data.users.push({
+                            id: deletedUser,
+                            label: this.lang.userDeleted
+                        });
+                    }
+
+                    data.systemActions = data.systemActions.map((syst: any) => {
+                        return {
+                            id: syst.id,
+                            label: this.lang[syst.id]
+                        }
+                    });
+                    return data;
+                }),
+                tap((data: any) => {
+                    Object.keys(data).forEach((filterType: any) => {
+                        if (this.functions.empty(this.filterList[filterType])) {
+                            this.filterList[filterType] = [];
+                            this.filteredList[filterType] = [];
+                        }
+                        data[filterType].forEach((element: any) => {
+                            this.filterList[filterType].push(element);
+                        });
+
+                        this.filteredList[filterType] = this.searchHistory.valueChanges
+                            .pipe(
+                                startWith(''),
+                                map(element => element ? this.filter(element, filterType) : this.filterList[filterType].slice())
+                            );
+                    });
+
+                }),
+                finalize(() => this.loadingFilters = false),
+                catchError((err: any) => {
+                    this.notify.handleSoftErrors(err);
+                    return of(false);
+                })
+            ).subscribe();
+
+        }
     }
 
-    ngAfterViewInit() {
-        this.batchDataSource.paginator = this.batchPaginator;
-        this.batchDataSource.sort = this.batchSort;
+    filterStartDate() {
+        if (this.functions.empty(this.filterUsed['startDate'])) {
+            this.filterUsed['startDate'] = [];
+        }
+        this.filterUsed['startDate'][0] = {
+            id: this.functions.empty(this.startDateFilter) ? '' : this.functions.formatDateObjectToFrenchDateString(this.startDateFilter),
+            label: this.functions.empty(this.startDateFilter) ? '' : this.functions.formatDateObjectToFrenchDateString(this.startDateFilter)
+        };
+        this.generateUrlFilter();
+        this.refreshDao();
     }
-    
-    _setDataSource(indexNumber : any) {
-        setTimeout(() => {
-            switch (indexNumber) {
-                case 0:
-                  !this.dataSource.paginator ? this.dataSource.paginator = this.paginator : null;
-                  !this.dataSource.sort ? this.dataSource.sort = this.sort : null;
-                  break;
-                case 1:
-                  !this.batchDataSource.paginator ? this.batchDataSource.paginator = this.batchPaginator : null;
-                  !this.batchDataSource.sort ? this.batchDataSource.sort = this.batchSort : null;
-            }
-        });
+
+    filterEndDate() {
+        if (this.functions.empty(this.filterUsed['endDate'])) {
+            this.filterUsed['endDate'] = [];
+        }
+        this.filterUsed['endDate'][0] = {
+            id: this.functions.empty(this.endDateFilter) ? '' : this.functions.formatDateObjectToFrenchDateString(this.endDateFilter, true),
+            label: this.functions.empty(this.endDateFilter) ? '' : this.functions.formatDateObjectToFrenchDateString(this.endDateFilter)
+        };
+        this.generateUrlFilter();
+        this.refreshDao();
     }
 
-    refreshHistory(historyType : string) {
-        if (historyType == 'normal') {
-            this.startDate.setHours(0,0,0,0);
-            this.endDate.setHours(23,59,59,59);
-            this.http.get('../../rest/histories', {params: {"startDate" : (this.startDate.getTime() / 1000).toString(), "endDate" : (this.endDate.getTime() / 1000).toString()}})
-                .subscribe((data: any) => {
-                    this.data = data['histories'];
-                    this.limitExceeded = data['limitExceeded'];
-                    this.loading = false;
-                    setTimeout(() => {
-                        this.dataSource = new MatTableDataSource(this.data);
-                        this.dataSource.paginator = this.paginator;
-                        this.dataSource.sort = this.sort;
-                    }, 0);
-                }, () => {
-                    location.href = "index.php";
-                });
-        } else {
-            this.batchStartDate.setHours(0,0,0,0);
-            this.batchEndDate.setHours(23,59,59,59);
-            this.http.get('../../rest/batchHistories', {params: {"startDate" : (this.batchStartDate.getTime() / 1000).toString(), "endDate" : (this.batchEndDate.getTime() / 1000).toString()}})
-                .subscribe((data: any) => {
-                    this.batchData = data['batchHistories'];
-                    this.batchLimitExceeded = data['limitExceeded'];
-                    this.loading = false;
-                    setTimeout(() => {
-                        this.accessBatchHistory = true;
-                        this.batchDataSource = new MatTableDataSource(this.batchData);
-                        this.batchDataSource.paginator = this.batchPaginator;
-                        this.batchDataSource.sort = this.batchSort;
-                    }, 0);
-                }, (data: any) => {
-                    if(data['error'].errors == 'Service forbidden'){
-                        this.loading = false;
-                        this.accessBatchHistory = false;
+    addItemFilter(elem: any) {
+        elem.value.used = true;
+        if (this.functions.empty(this.filterUsed[elem.id])) {
+            this.filterUsed[elem.id] = [];
+        }
+        this.filterUsed[elem.id].push(elem.value);
+        this.generateUrlFilter();
+        this.searchHistory.reset();
+        this.autoCompleteInput.nativeElement.blur();
+        this.refreshDao();
+    }
+
+    removeItemFilter(elem: any, type: string, index: number) {
+        elem.used = false;
+        this.filterUsed[type].splice(index, 1);
+        this.generateUrlFilter();
+        this.refreshDao();
+    }
+
+
+    generateUrlFilter() {
+        this.filterUrl = '';
+        let arrTmpUrl: any[] = [];
+        Object.keys(this.filterUsed).forEach((type: any) => {
+            this.filterUsed[type].forEach((filter: any) => {
+                if (!this.functions.empty(filter.id)) {
+                    if (['startDate', 'endDate'].indexOf(type) > -1) {
+                        arrTmpUrl.push(`${type}=${filter.id}`);
                     } else {
-                        location.href = "index.php";
+                        arrTmpUrl.push(`${type}[]=${filter.id}`);
                     }
-                });
+                }
+            });
+        });
+        if (arrTmpUrl.length > 0) {
+            this.filterUrl = '&' + arrTmpUrl.join('&');
+        }
+    }
+
+    private filter(value: string, type: string): any[] {
+        if (typeof value === 'string') {
+            const filterValue = this.latinisePipe.transform(value.toLowerCase());
+            return this.filterList[type].filter((elem: any) => this.latinisePipe.transform(elem.label.toLowerCase()).includes(filterValue));
+        } else {
+            return this.filterList[type];
         }
     }
 }
+
+export interface HistoryList {
+    history: any[];
+    count: number;
+}
+export class HistoryListHttpDao {
+
+    constructor(private http: HttpClient) { }
+
+    getRepoIssues(sort: string, order: string, page: number, href: string, search: string): Observable<HistoryList> {
+
+        let offset = page * 10;
+        const requestUrl = `${href}?limit=10&offset=${offset}&order=${order}&orderBy=${sort}${search}`;
+
+        return this.http.get<HistoryList>(requestUrl);
+    }
+}
\ No newline at end of file
diff --git a/src/frontend/app/administration/user/users-administration.component.html b/src/frontend/app/administration/user/users-administration.component.html
index 74f049284854964c11366c8499507698931168ea..6fbcd7b8d5200ab04274d8f46ba9e066aca4d51d 100755
--- a/src/frontend/app/administration/user/users-administration.component.html
+++ b/src/frontend/app/administration/user/users-administration.component.html
@@ -31,6 +31,10 @@
                     <div class="col-md-6 col-xs-6">
                         <mat-form-field>
                             <input matInput (keyup)="applyFilter($event.target.value)" placeholder="{{lang.filterBy}}">
+                            <mat-button-toggle class="webserviceAccount" matSuffix (click)="$event.stopPropagation();toggleWebserviceAccount()"
+                                [checked]="this.withWebserviceAccount" title="{{lang.displayWebserviceAccount}}" >
+                                <mat-icon fontSet="fas" fontIcon="fa-user-shield fa-2x" style="margin-left: -2px; margin-top: -4px;"></mat-icon>
+                            </mat-button-toggle>
                         </mat-form-field>
                     </div>
                     <div class="col-md-6 col-xs-6">
diff --git a/src/frontend/app/administration/user/users-administration.component.scss b/src/frontend/app/administration/user/users-administration.component.scss
index 03c8894cde0b48cf4f4c66bfde248910c1fa3d12..fe089dd18f6f8e436a112b68cad70cedfa41ce4b 100644
--- a/src/frontend/app/administration/user/users-administration.component.scss
+++ b/src/frontend/app/administration/user/users-administration.component.scss
@@ -11,4 +11,17 @@ button:disabled{
 
 .statusUserLabelPrimary {
     color : $primary;
-}
\ No newline at end of file
+}
+
+.webserviceAccount {
+    color: #666;
+    width: 37px;
+    height: 37px;
+    font-size: x-small;
+    border-radius: 18px !important;
+}
+
+.mat-button-toggle-checked {
+    background-color: #F99830 !important;
+    color: white;
+}
diff --git a/src/frontend/app/administration/user/users-administration.component.ts b/src/frontend/app/administration/user/users-administration.component.ts
index 557946e2e4c00f14e6eea27ac40bf00ad2c1dc07..6da9821f8e19b2850b825374f002c47c2f87756f 100755
--- a/src/frontend/app/administration/user/users-administration.component.ts
+++ b/src/frontend/app/administration/user/users-administration.component.ts
@@ -38,6 +38,9 @@ export class UsersAdministrationComponent implements OnInit {
     listinstances                           : any[]                 = [];
     quota                                   : any                   = {};
     user                                    : any                   = {};
+    withWebserviceAccount                   : boolean               = false;
+    webserviceAccounts                      : any[]                 = [];
+    noWebserviceAccounts                    : any[]                 = [];
 
     dataSource          = new MatTableDataSource(this.data);
     displayedColumns    = ['id', 'user_id', 'lastname', 'firstname', 'status', 'mail', 'actions'];
@@ -72,25 +75,35 @@ export class UsersAdministrationComponent implements OnInit {
         this.http.get('../../rest/users')
             .subscribe((data: any) => {
                 this.data = data['users'];
-                 this.data.forEach(element => {
-                    element.statusLabel = this.lang['user'+element.status]
+                this.data.forEach(element => {
+                    element.statusLabel = this.lang['user'+element.status];
+                    if (element.loginmode == 'restMode') {
+                        this.webserviceAccounts.push(element);
+                    } else {
+                        this.noWebserviceAccounts.push(element);
+                    }
                 });
+                this.data = this.noWebserviceAccounts;
                 this.quota = data['quota'];
                 if (this.quota.actives > this.quota.userQuota) {
                     this.notify.error(this.lang.quotaExceeded);
                 }
 
                 this.loading = false;
-                setTimeout(() => {
-                    this.dataSource = new MatTableDataSource(this.data);
-                    this.dataSource.paginator = this.paginator;
-                    this.dataSource.sort = this.sort;
-                }, 0);
+                this.setDatasource();
             }, () => {
                 location.href = "index.php";
             });
     }
 
+    setDatasource() {
+        setTimeout(() => {
+            this.dataSource = new MatTableDataSource(this.data);
+            this.dataSource.paginator = this.paginator;
+            this.dataSource.sort = this.sort;
+        }, 0);
+    }
+
     activateUser(user: any) {
         let r = confirm(this.lang.confirmAction + ' ' + this.lang.authorize + ' « ' + user.user_id + ' »');
 
@@ -190,9 +203,7 @@ export class UsersAdministrationComponent implements OnInit {
                                                                         this.data.splice(Number(i), 1);
                                                                     }
                                                                 }
-                                                                this.dataSource = new MatTableDataSource(this.data);
-                                                                this.dataSource.paginator = this.paginator;
-                                                                this.dataSource.sort = this.sort;
+                                                                this.setDatasource();
 
                                                                 if (this.quota.userQuota && user.status != 'SPD') {
                                                                     this.quota.actives--;
@@ -244,9 +255,7 @@ export class UsersAdministrationComponent implements OnInit {
                                                             this.data.splice(Number(i), 1);
                                                         }
                                                     }
-                                                    this.dataSource = new MatTableDataSource(this.data);
-                                                    this.dataSource.paginator = this.paginator;
-                                                    this.dataSource.sort = this.sort;
+                                                    this.setDatasource();
 
                                                     if (this.quota.userQuota && user.status == 'OK') {
                                                         this.quota.actives--;
@@ -297,9 +306,7 @@ export class UsersAdministrationComponent implements OnInit {
                                                                 this.data.splice(Number(i), 1);
                                                             }
                                                         }
-                                                        this.dataSource = new MatTableDataSource(this.data);
-                                                        this.dataSource.paginator = this.paginator;
-                                                        this.dataSource.sort = this.sort;
+                                                        this.setDatasource();
 
                                                         if (this.quota.userQuota && user.status == 'OK') {
                                                             this.quota.actives--;
@@ -346,9 +353,7 @@ export class UsersAdministrationComponent implements OnInit {
                                                     this.data.splice(Number(i), 1);
                                                 }
                                             }
-                                            this.dataSource = new MatTableDataSource(this.data);
-                                            this.dataSource.paginator = this.paginator;
-                                            this.dataSource.sort = this.sort;
+                                            this.setDatasource();
 
                                             if (this.quota.userQuota && user.status == 'OK') {
                                                 this.quota.actives--;
@@ -390,6 +395,16 @@ export class UsersAdministrationComponent implements OnInit {
             });
     }
 
+    toggleWebserviceAccount () {
+        this.withWebserviceAccount = !this.withWebserviceAccount;
+        if (this.withWebserviceAccount) {
+            this.data = this.webserviceAccounts;
+        } else {
+            this.data = this.noWebserviceAccounts;
+        }
+        this.setDatasource();
+    }
+
 }
 @Component({
     templateUrl: "users-administration-redirect-modal.component.html",
diff --git a/src/frontend/app/avis/avis-workflow.component.ts b/src/frontend/app/avis/avis-workflow.component.ts
index 2238e47b7e210795f39a868fc021c5e30785bb9e..1ca989e78dad4f394cb5955858ba0be60f0c06e6 100644
--- a/src/frontend/app/avis/avis-workflow.component.ts
+++ b/src/frontend/app/avis/avis-workflow.component.ts
@@ -323,7 +323,8 @@ export class AvisWorkflowComponent implements OnInit {
                     this.avisWorkflow.items.push(
                         {
                             ...element,
-                            difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id'
+                            difflist_type: this.mode === 'circuit' ? 'AVIS_CIRCUIT' : 'entity_id',
+                            item_entity: element.descriptionToDisplay
                         });
                 });
                 this.avisWorkflowClone = JSON.parse(JSON.stringify(this.avisWorkflow.items))
diff --git a/src/frontend/app/history/history-workflow-resume/history-workflow-resume.component.ts b/src/frontend/app/history/history-workflow-resume/history-workflow-resume.component.ts
index 520465cd0e40856a6f81fe0ea660e6da6d547f84..0bfa3e74501825c783a8728f6052e102671594cf 100644
--- a/src/frontend/app/history/history-workflow-resume/history-workflow-resume.component.ts
+++ b/src/frontend/app/history/history-workflow-resume/history-workflow-resume.component.ts
@@ -40,7 +40,7 @@ export class HistoryWorkflowResumeComponent implements OnInit {
 
     loadHistory(resId: number) {
         this.loading = true;
-        this.http.get(`../../rest/histories/resources/${resId}/workflow?limit=3`).pipe(
+        this.http.get(`../../rest/history/resources/${resId}/workflow?limit=3`).pipe(
             tap((data: any) => {
                 this.histories = data.history;
             }),
@@ -55,4 +55,4 @@ export class HistoryWorkflowResumeComponent implements OnInit {
     showMore() {
         this.goTo.emit();
     }
-}
\ No newline at end of file
+}
diff --git a/src/frontend/app/indexation/indexing-form/indexing-form.component.ts b/src/frontend/app/indexation/indexing-form/indexing-form.component.ts
index fb437b789827dabf44f5c62b1d77ff833ba6e61e..b605a59c510985ef4e9d4102d3d6541bb9a04393 100644
--- a/src/frontend/app/indexation/indexing-form/indexing-form.component.ts
+++ b/src/frontend/app/indexation/indexing-form/indexing-form.component.ts
@@ -435,7 +435,9 @@ export class IndexingFormComponent implements OnInit {
         elem.endDate = '_TODAY';
 
         this.fieldCategories.forEach(element => {
-            if (this['indexingModels_' + element].filter((field: any) => field.identifier === 'departureDate').length > 0) {
+            if (this['indexingModels_' + element].filter((field: any) => field.identifier === 'arrivalDate').length > 0) {
+                elem.endDate = 'arrivalDate';
+            } else if (this['indexingModels_' + element].filter((field: any) => field.identifier === 'departureDate').length > 0) {
                 elem.endDate = 'departureDate';
             }
         });
diff --git a/src/frontend/app/list/filters/filters-tool.component.html b/src/frontend/app/list/filters/filters-tool.component.html
index abbb8d9dbd8c1f73124b0ef4ca02859181baadcf..fd394835f3676e524abd3eb894773c43bd54ec1d 100644
--- a/src/frontend/app/list/filters/filters-tool.component.html
+++ b/src/frontend/app/list/filters/filters-tool.component.html
@@ -98,4 +98,8 @@
         *ngFor="let doctype of this.listProperties.doctypes; let i=index"
         (click)="removeFilter('doctypes', i)">{{doctype.label}}
         <i class="fa fa-times-circle"></i></span>
-</div>
\ No newline at end of file
+    <span class="label badge-folders" title="{{lang.folders}}"
+        *ngFor="let folder of this.listProperties.folders; let i=index"
+        (click)="removeFilter('folders', i)">{{folder.label}}
+        <i class="fa fa-times-circle"></i></span>
+</div>
diff --git a/src/frontend/app/list/filters/filters-tool.component.scss b/src/frontend/app/list/filters/filters-tool.component.scss
index 7c7aa866df0cab4846a58ef4951c0ecc18f70bd2..e787d4e129d251a0e737533bd15af6328d8c52a3 100644
--- a/src/frontend/app/list/filters/filters-tool.component.scss
+++ b/src/frontend/app/list/filters/filters-tool.component.scss
@@ -172,6 +172,12 @@
     cursor: pointer;
 }
 
+.filterBadges>.badge-folders {
+    margin: 5px;
+    background: #a3d627;
+    cursor: pointer;
+}
+
 ::ng-deep.autoCompletePanelFilter {
     left: 25px;
     min-width: 400px !important;
@@ -182,4 +188,4 @@
     color: #F99830;
     font-size: 14px;
     font-weight: 500;
-}
\ No newline at end of file
+}
diff --git a/src/frontend/app/list/filters/filters-tool.component.ts b/src/frontend/app/list/filters/filters-tool.component.ts
index 8aa7905da1df98a189fa75c36c11168bdac4d4a2..25741890e913b6cd994b49c233e121dcf6988805 100644
--- a/src/frontend/app/list/filters/filters-tool.component.ts
+++ b/src/frontend/app/list/filters/filters-tool.component.ts
@@ -200,6 +200,10 @@ export class FiltersToolComponent implements OnInit {
                 letter: this.lang.doctypes,
                 names: []
             },
+            {
+                letter: this.lang.folders,
+                names: []
+            },
         ];
 
         this.http.get('../..' + this.routeDatas + '?init' + this.filtersListService.getUrlFilters())
@@ -281,6 +285,19 @@ export class FiltersToolComponent implements OnInit {
                         )
                     }
                 });
+
+                data.folders.forEach((element: any) => {
+                    if (this.listProperties.folders.map((doctype: any) => (doctype.id)).indexOf(element.id) === -1) {
+                        this.stateGroups[6].names.push(
+                            {
+                                id: 'folders',
+                                value: element.id,
+                                label: (element.id !== null ? element.label : this.lang.undefined),
+                                count: element.count
+                            }
+                        )
+                    }
+                });
                 this.isLoading = false;
                 if (this.metaSearchInput.length > 0) {
                     setTimeout(() => {
diff --git a/src/frontend/app/profile.component.ts b/src/frontend/app/profile.component.ts
index 3de50d5b0a0b74821c5ccbc55bc862ab33ee62a5..dde85ab969b069b916ebc4e35cf58ab677b2c78e 100755
--- a/src/frontend/app/profile.component.ts
+++ b/src/frontend/app/profile.component.ts
@@ -201,7 +201,7 @@ export class ProfileComponent implements OnInit {
                 this.sidenavRight.open();
             } 
             //if (this.histories.length == 0) {
-                this.http.get('../../rest/histories/users/' + this.user.id)
+                this.http.get('../../rest/history/users/' + this.user.id)
                     .subscribe((data: any) => {
                         this.histories = data.histories;
                         setTimeout(() => {
diff --git a/src/frontend/app/visa/visa-workflow.component.html b/src/frontend/app/visa/visa-workflow.component.html
index a73098da0d319a8d75cab54bb5bcd1373a3a1af5..effba69fdb328760992900d93c25cd4575c5a7d7 100644
--- a/src/frontend/app/visa/visa-workflow.component.html
+++ b/src/frontend/app/visa/visa-workflow.component.html
@@ -32,7 +32,7 @@
             <mat-optgroup [label]="lang.visaUser + ' / ' + lang.signUser" *ngIf="(filteredSignVisaUsers | async)?.length > 0"
                 class="visaSignList">
                 <mat-option *ngFor="let user of filteredSignVisaUsers | async | sortBy : 'label'" [value]="user">
-                    {{user.label}} <small>({{user.entity}})</small>
+                    {{user.label}}&nbsp;<small>({{user.entity}})</small>
                 </mat-option>
             </mat-optgroup>
         </mat-autocomplete>
@@ -65,7 +65,7 @@
             </mat-icon>
             <ng-container *ngIf="!adminMode || diffusion.process_date != null">
                 <mat-icon mat-list-icon class="fa-2x fa"
-                [title]="diffusion.process_comment"
+                [title]="diffusion.process_comment !== null ? diffusion.process_comment : ''"
                 [class.fa-hourglass]="diffusion.process_date == null"
                 [class.fa-thumbs-up]="diffusion.process_date != null && [lang.visaWorkflowInterrupted, lang.hasInterruptedWorkflow].indexOf(diffusion.process_comment) === -1"
                 [class.fa-hand-paper]="diffusion.process_date != null && diffusion.process_comment === lang.hasInterruptedWorkflow"
diff --git a/src/frontend/css/maarch-material.css b/src/frontend/css/maarch-material.css
index dc876fd4bd081741c1a54f175bf299c8003bdd59..17ce42e60a2fd08361ca94080de8eef2c1f2eaf5 100755
--- a/src/frontend/css/maarch-material.css
+++ b/src/frontend/css/maarch-material.css
@@ -1 +1 @@
-.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, "Helvetica Neue", sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, "Helvetica Neue", sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif}.mat-expansion-panel-header{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:normal}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;margin:0}.mat-tooltip{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-option{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-simple-snackbar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}@media (-ms-high-contrast: active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast: active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:0.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,0.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto !important;overflow:hidden !important;padding:2px 0 !important;box-sizing:content-box !important}.mat-ripple-element{background-color:rgba(0,0,0,0.1)}.mat-option{color:rgba(0,0,0,0.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,0.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,0.04)}.mat-option.mat-active{background:rgba(0,0,0,0.04);color:rgba(0,0,0,0.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,0.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#135f7f}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#006841}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#8e3e52}.mat-optgroup-label{color:rgba(0,0,0,0.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,0.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,0.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#006841}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#135f7f}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#8e3e52}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)}.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-autocomplete-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,0.87)}.mat-badge-content{color:#fff;background:#135f7f}@media (-ms-high-contrast: active){.mat-badge-content{outline:solid 1px;border-radius:0}}.mat-badge-accent .mat-badge-content{background:#006841;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#8e3e52}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,0.38)}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir='rtl'] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir='rtl'] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir='rtl'] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir='rtl'] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir='rtl'] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir='rtl'] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir='rtl'] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir='rtl'] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir='rtl'] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir='rtl'] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir='rtl'] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir='rtl'] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12);background:#fff;color:rgba(0,0,0,0.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#135f7f}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#006841}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#8e3e52}.mat-button.mat-primary[disabled],.mat-button.mat-accent[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled],.mat-stroked-button.mat-primary[disabled],.mat-stroked-button.mat-accent[disabled],.mat-stroked-button.mat-warn[disabled],.mat-stroked-button[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#135f7f}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#006841}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#8e3e52}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay,.mat-stroked-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not([disabled]){border-color:rgba(0,0,0,0.12)}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,0.87);background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:#fff}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#135f7f}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#006841}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#8e3e52}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{background-color:rgba(0,0,0,0.12)}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-stroked-button:not([class*='mat-elevation-z']),.mat-flat-button:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-raised-button:not([class*='mat-elevation-z']){box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-raised-button:not([disabled]):active:not([class*='mat-elevation-z']){box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mat-raised-button[disabled]:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-fab:not([class*='mat-elevation-z']),.mat-mini-fab:not([class*='mat-elevation-z']){box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-fab:not([disabled]):active:not([class*='mat-elevation-z']),.mat-mini-fab:not([disabled]):active:not([class*='mat-elevation-z']){box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)}.mat-fab[disabled]:not([class*='mat-elevation-z']),.mat-mini-fab[disabled]:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,0.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,0.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,0.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,0.12)}[dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,0.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,0.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,0.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,0.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,0.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,0.12)}.mat-card{background:#fff;color:rgba(0,0,0,0.87)}.mat-card:not([class*='mat-elevation-z']){box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}.mat-card.mat-card-flat:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-card-subtitle{color:rgba(0,0,0,0.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,0.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}@media (-ms-high-contrast: black-on-white){.mat-checkbox-checkmark-path{stroke:#000 !important}}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#135f7f}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#006841}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#8e3e52}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,0.54)}@media (-ms-high-contrast: active){.mat-checkbox-disabled{opacity:0.5}}@media (-ms-high-contrast: active){.mat-checkbox-background{background:none}}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#135f7f}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#006841}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#8e3e52}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,0.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,0.87);opacity:0.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:0.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:0.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#135f7f;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#8e3e52;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#006841;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,0.12)}.mat-header-cell{color:rgba(0,0,0,0.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,0.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,0.54)}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,0.54)}.mat-calendar-table-header{color:rgba(0,0,0,0.38)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,0.12)}.mat-calendar-body-label{color:rgba(0,0,0,0.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,0.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,0.38)}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,0.04)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.18)}.mat-calendar-body-selected{background-color:#135f7f;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(19,95,127,0.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);background-color:#fff;color:rgba(0,0,0,0.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#006841;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(0,104,65,0.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#8e3e52;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(142,62,82,0.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content-touch{box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-datepicker-toggle-active{color:#135f7f}.mat-datepicker-toggle-active.mat-accent{color:#006841}.mat-datepicker-toggle-active.mat-warn{color:#8e3e52}.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12);background:#fff;color:rgba(0,0,0,0.87)}.mat-divider{border-top-color:rgba(0,0,0,0.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,0.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-expansion-panel:not([class*='mat-elevation-z']){box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-action-row{border-top-color:rgba(0,0,0,0.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled='true']),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled='true']),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled='true']){background:rgba(0,0,0,0.04)}@media (hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true']) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,0.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,0.54)}.mat-expansion-panel-header[aria-disabled='true']{color:rgba(0,0,0,0.26)}.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-description{color:inherit}.mat-form-field-label{color:rgba(0,0,0,0.6)}.mat-hint{color:rgba(0,0,0,0.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#135f7f}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#006841}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#8e3e52}.mat-focused .mat-form-field-required-marker{color:#006841}.mat-form-field-ripple{background-color:rgba(0,0,0,0.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#135f7f}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#006841}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#8e3e52}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#135f7f}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#006841}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#8e3e52}.mat-error{color:#8e3e52}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,0.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,0.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,0.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,0.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,0.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,0.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,0.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#135f7f}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#006841}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#8e3e52}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#8e3e52}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,0.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,0.06)}.mat-icon.mat-primary{color:#135f7f}.mat-icon.mat-accent{color:#006841}.mat-icon.mat-warn{color:#8e3e52}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,0.54)}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,0.38)}.mat-input-element{caret-color:#135f7f}.mat-input-element::placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,0.42)}.mat-accent .mat-input-element{caret-color:#006841}.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#8e3e52}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#8e3e52}.mat-list-base .mat-list-item{color:rgba(0,0,0,0.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,0.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,0.54)}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,0.04)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,0.87)}.mat-menu-item[disabled],.mat-menu-item[disabled]::after{color:rgba(0,0,0,0.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-item-submenu-trigger::after{color:rgba(0,0,0,0.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,0.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,0.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,0.54);border-right:2px solid rgba(0,0,0,0.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,0.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,0.38)}.mat-progress-bar-background{fill:#1a80ab}.mat-progress-bar-buffer{background-color:#1a80ab}.mat-progress-bar-fill::after{background-color:#135f7f}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#009b61}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#009b61}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#006841}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#b24e67}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#b24e67}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#8e3e52}.mat-progress-spinner circle,.mat-spinner circle{stroke:#135f7f}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#006841}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#8e3e52}.mat-radio-outer-circle{border-color:rgba(0,0,0,0.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#135f7f}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#135f7f}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#006841}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#006841}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#8e3e52}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#8e3e52}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,0.38)}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,0.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,0.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,0.87)}.mat-select-placeholder{color:rgba(0,0,0,0.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,0.38)}.mat-select-arrow{color:rgba(0,0,0,0.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,0.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#135f7f}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#006841}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#8e3e52}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#8e3e52}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,0.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,0.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,0.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,0.12);border-right:none}[dir='rtl'] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,0.12);border-right:none}[dir='rtl'] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,0.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,0.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#006841}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(0,104,65,0.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#006841}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#135f7f}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(19,95,127,0.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#135f7f}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#8e3e52}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(142,62,82,0.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#8e3e52}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,0.38)}.mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#135f7f}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#006841}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#8e3e52}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(0,104,65,0.2)}.mat-slider:hover .mat-slider-track-background,.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,0.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,0.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,0.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,0.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,0.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,0.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,0.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,0.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,0.04)}@media (hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,0.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,0.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#135f7f;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#8e3e52}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,0.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#8e3e52}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,0.12)}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,0.12)}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,0.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,0.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,0.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,0.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.38)}.mat-tab-group[class*='mat-background-'] .mat-tab-header,.mat-tab-nav-bar[class*='mat-background-']{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(26,128,171,0.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#135f7f}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(0,155,97,0.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#006841}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(178,78,103,0.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#8e3e52}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(26,128,171,0.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-group.mat-background-primary .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination{background-color:#135f7f}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(0,155,97,0.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-group.mat-background-accent .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination{background-color:#006841}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(178,78,103,0.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-group.mat-background-warn .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination{background-color:#8e3e52}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,0.87)}.mat-toolbar.mat-primary{background:#135f7f;color:#fff}.mat-toolbar.mat-accent{background:#006841;color:#fff}.mat-toolbar.mat-warn{background:#8e3e52;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-tooltip{background:rgba(97,97,97,0.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,0.87)}.mat-snack-bar-container{color:rgba(255,255,255,0.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-simple-snackbar-action{color:#006841}[color=primary]{color:#135f7f}[color=secondary]{color:#F99830}[color=warn]{color:#8e3e52}[color=accent]{color:#006841}[bgcolor=primary]{background-color:#135f7f}[bgcolor=warn]{background-color:#8e3e52}[bgcolor=accent]{background-color:#006841}.jstree-proton .jstree-clicked{background:#1a80ab !important}.jstree-proton :not(.jstree-disabled).jstree-hovered{background:#1a80ab !important;box-shadow:inset 0 0 1px #135f7f !important}.jstree-proton .jstree-disabled:hover{cursor:not-allowed}.dndFile{border:dashed 5px grey;padding:10px;text-align:center;opacity:0.5;font-size:15px;font-weight:bolder;margin:20px}.dndFileHighlighted{opacity:1 !important;border:dashed 5px #135f7f !important;color:#135f7f}.cdk-textarea-autosize{min-height:18px !important}
+.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 calc(14px * 0.83)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 calc(14px * 0.67)/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, "Helvetica Neue", sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, "Helvetica Neue", sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, "Helvetica Neue", sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif}.mat-expansion-panel-header{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:normal}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;margin:0}.mat-tooltip{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-option{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-simple-snackbar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}@media (-ms-high-contrast: active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast: active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:0.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,0.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto !important;overflow:hidden !important;padding:2px 0 !important;box-sizing:content-box !important}.mat-ripple-element{background-color:rgba(0,0,0,0.1)}.mat-option{color:rgba(0,0,0,0.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,0.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,0.04)}.mat-option.mat-active{background:rgba(0,0,0,0.04);color:rgba(0,0,0,0.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,0.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#135f7f}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#006841}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#8e3e52}.mat-optgroup-label{color:rgba(0,0,0,0.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,0.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,0.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#135f7f}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#006841}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#8e3e52}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)}.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-autocomplete-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,0.87)}.mat-badge-content{color:#fff;background:#135f7f}@media (-ms-high-contrast: active){.mat-badge-content{outline:solid 1px;border-radius:0}}.mat-badge-accent .mat-badge-content{background:#006841;color:#fff}.mat-badge-warn .mat-badge-content{color:#fff;background:#8e3e52}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,0.38)}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform 200ms ease-in-out;transform:scale(0.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ng-animate-disabled .mat-badge-content,.mat-badge-content._mat-animation-noopable{transition:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir='rtl'] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir='rtl'] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir='rtl'] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir='rtl'] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir='rtl'] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir='rtl'] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir='rtl'] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir='rtl'] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir='rtl'] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir='rtl'] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir='rtl'] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir='rtl'] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12);background:#fff;color:rgba(0,0,0,0.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#135f7f}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#006841}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#8e3e52}.mat-button.mat-primary[disabled],.mat-button.mat-accent[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled],.mat-stroked-button.mat-primary[disabled],.mat-stroked-button.mat-accent[disabled],.mat-stroked-button.mat-warn[disabled],.mat-stroked-button[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#135f7f}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#006841}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#8e3e52}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay,.mat-stroked-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not([disabled]){border-color:rgba(0,0,0,0.12)}.mat-flat-button,.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,0.87);background-color:#fff}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{color:#fff}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:#fff}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:#fff}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-flat-button.mat-primary,.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#135f7f}.mat-flat-button.mat-accent,.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#006841}.mat-flat-button.mat-warn,.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:#8e3e52}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{background-color:rgba(0,0,0,0.12)}.mat-flat-button.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-flat-button.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-flat-button.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,0.1)}.mat-stroked-button:not([class*='mat-elevation-z']),.mat-flat-button:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-raised-button:not([class*='mat-elevation-z']){box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-raised-button:not([disabled]):active:not([class*='mat-elevation-z']){box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mat-raised-button[disabled]:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-fab:not([class*='mat-elevation-z']),.mat-mini-fab:not([class*='mat-elevation-z']){box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-fab:not([disabled]):active:not([class*='mat-elevation-z']),.mat-mini-fab:not([disabled]):active:not([class*='mat-elevation-z']){box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)}.mat-fab[disabled]:not([class*='mat-elevation-z']),.mat-mini-fab[disabled]:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-button-toggle-standalone,.mat-button-toggle-group{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,0.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,0.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,0.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,0.12)}[dir='rtl'] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,0.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,0.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,0.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,0.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,0.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:solid 1px rgba(0,0,0,0.12)}.mat-card{background:#fff;color:rgba(0,0,0,0.87)}.mat-card:not([class*='mat-elevation-z']){box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}.mat-card.mat-card-flat:not([class*='mat-elevation-z']){box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-card-subtitle{color:rgba(0,0,0,0.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,0.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}@media (-ms-high-contrast: black-on-white){.mat-checkbox-checkmark-path{stroke:#000 !important}}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#135f7f}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#006841}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#8e3e52}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,0.54)}@media (-ms-high-contrast: active){.mat-checkbox-disabled{opacity:0.5}}@media (-ms-high-contrast: active){.mat-checkbox-background{background:none}}.mat-checkbox .mat-ripple-element{background-color:#000}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-primary .mat-ripple-element{background:#135f7f}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-accent .mat-ripple-element{background:#006841}.mat-checkbox-checked:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element,.mat-checkbox:active:not(.mat-checkbox-disabled).mat-warn .mat-ripple-element{background:#8e3e52}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,0.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,0.87);opacity:0.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:0.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:0.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#135f7f;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#8e3e52;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#006841;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:#fff;opacity:0.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background:rgba(255,255,255,0.1)}.mat-table{background:#fff}.mat-table thead,.mat-table tbody,.mat-table tfoot,mat-header-row,mat-row,mat-footer-row,[mat-header-row],[mat-row],[mat-footer-row],.mat-table-sticky{background:inherit}mat-row,mat-header-row,mat-footer-row,th.mat-header-cell,td.mat-cell,td.mat-footer-cell{border-bottom-color:rgba(0,0,0,0.12)}.mat-header-cell{color:rgba(0,0,0,0.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,0.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,0.54)}.mat-datepicker-toggle,.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button{color:rgba(0,0,0,0.54)}.mat-calendar-table-header{color:rgba(0,0,0,0.38)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,0.12)}.mat-calendar-body-label{color:rgba(0,0,0,0.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,0.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,0.38)}.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,0.04)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.18)}.mat-calendar-body-selected{background-color:#135f7f;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(19,95,127,0.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);background-color:#fff;color:rgba(0,0,0,0.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#006841;color:#fff}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(0,104,65,0.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#8e3e52;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(142,62,82,0.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content-touch{box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-datepicker-toggle-active{color:#135f7f}.mat-datepicker-toggle-active.mat-accent{color:#006841}.mat-datepicker-toggle-active.mat-warn{color:#8e3e52}.mat-dialog-container{box-shadow:0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12);background:#fff;color:rgba(0,0,0,0.87)}.mat-divider{border-top-color:rgba(0,0,0,0.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,0.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-expansion-panel:not([class*='mat-elevation-z']){box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-action-row{border-top-color:rgba(0,0,0,0.12)}.mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled='true']),.mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled='true']),.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled='true']){background:rgba(0,0,0,0.04)}@media (hover: none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled='true']) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,0.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,0.54)}.mat-expansion-panel-header[aria-disabled='true']{color:rgba(0,0,0,0.26)}.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-description{color:inherit}.mat-form-field-label{color:rgba(0,0,0,0.6)}.mat-hint{color:rgba(0,0,0,0.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#135f7f}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#006841}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#8e3e52}.mat-focused .mat-form-field-required-marker{color:#006841}.mat-form-field-ripple{background-color:rgba(0,0,0,0.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#135f7f}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#006841}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#8e3e52}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#135f7f}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#006841}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#8e3e52}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#8e3e52}.mat-error{color:#8e3e52}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,0.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,0.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.42) 33%, transparent 0%);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,0.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,0.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,0.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,0.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,0.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,0.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#135f7f}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#006841}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#8e3e52}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#8e3e52}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,0.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,0.06)}.mat-icon.mat-primary{color:#135f7f}.mat-icon.mat-accent{color:#006841}.mat-icon.mat-warn{color:#8e3e52}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,0.54)}.mat-input-element:disabled,.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after{color:rgba(0,0,0,0.38)}.mat-input-element{caret-color:#135f7f}.mat-input-element::placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,0.42)}.mat-accent .mat-input-element{caret-color:#006841}.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#8e3e52}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#8e3e52}.mat-list-base .mat-list-item{color:rgba(0,0,0,0.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,0.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,0.54)}.mat-list-item-disabled{background-color:#eee}.mat-list-option:hover,.mat-list-option:focus,.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-action-list .mat-list-item:focus{background:rgba(0,0,0,0.04)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-menu-item{background:transparent;color:rgba(0,0,0,0.87)}.mat-menu-item[disabled],.mat-menu-item[disabled]::after{color:rgba(0,0,0,0.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-item-submenu-trigger::after{color:rgba(0,0,0,0.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,0.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,0.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,0.54);border-right:2px solid rgba(0,0,0,0.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,0.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,0.38)}.mat-progress-bar-background{fill:#1a80ab}.mat-progress-bar-buffer{background-color:#1a80ab}.mat-progress-bar-fill::after{background-color:#135f7f}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#009b61}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#009b61}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#006841}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#b24e67}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#b24e67}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#8e3e52}.mat-progress-spinner circle,.mat-spinner circle{stroke:#135f7f}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#006841}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#8e3e52}.mat-radio-outer-circle{border-color:rgba(0,0,0,0.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#135f7f}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#135f7f}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#006841}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#006841}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#8e3e52}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#8e3e52}.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,0.38)}.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,0.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,0.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,0.87)}.mat-select-placeholder{color:rgba(0,0,0,0.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,0.38)}.mat-select-arrow{color:rgba(0,0,0,0.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*='mat-elevation-z']){box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,0.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#135f7f}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#006841}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#8e3e52}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#8e3e52}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,0.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,0.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,0.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,0.12);border-right:none}[dir='rtl'] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,0.12);border-right:none}[dir='rtl'] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,0.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,0.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#006841}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(0,104,65,0.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#006841}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#135f7f}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(19,95,127,0.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#135f7f}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#8e3e52}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(142,62,82,0.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#8e3e52}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,0.38)}.mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#135f7f}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#006841}.mat-accent .mat-slider-thumb-label-text{color:#fff}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#8e3e52}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(0,104,65,0.2)}.mat-slider:hover .mat-slider-track-background,.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,0.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,0.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,0.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,0.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,0.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,0.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,0.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,0.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,0.04)}@media (hover: none){.mat-step-header:hover{background:none}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,0.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,0.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#135f7f;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#8e3e52}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,0.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#8e3e52}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,0.12)}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,0.12)}.mat-sort-header-arrow{color:#757575}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,0.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,0.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,0.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,0.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.38)}.mat-tab-group[class*='mat-background-'] .mat-tab-header,.mat-tab-nav-bar[class*='mat-background-']{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(26,128,171,0.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#135f7f}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(0,155,97,0.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#006841}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(178,78,103,0.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#8e3e52}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(26,128,171,0.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-group.mat-background-primary .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination{background-color:#135f7f}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(0,155,97,0.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-group.mat-background-accent .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination{background-color:#006841}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:#fff}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(178,78,103,0.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-group.mat-background-warn .mat-tab-header-pagination,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination{background-color:#8e3e52}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,0.87)}.mat-toolbar.mat-primary{background:#135f7f;color:#fff}.mat-toolbar.mat-accent{background:#006841;color:#fff}.mat-toolbar.mat-warn{background:#8e3e52;color:#fff}.mat-toolbar .mat-form-field-underline,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-focused .mat-form-field-ripple{background-color:currentColor}.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-select-value,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-tooltip{background:rgba(97,97,97,0.9)}.mat-tree{background:#fff}.mat-tree-node,.mat-nested-tree-node{color:rgba(0,0,0,0.87)}.mat-snack-bar-container{color:rgba(255,255,255,0.7);background:#323232;box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-simple-snackbar-action{color:#006841}[color=primary]{color:#135f7f}[color=secondary]{color:#F99830}[color=warn]{color:#8e3e52}[color=accent]{color:#006841}[bgcolor=primary]{background-color:#135f7f}[bgcolor=warn]{background-color:#8e3e52}[bgcolor=accent]{background-color:#006841}.jstree-proton .jstree-clicked{background:#1a80ab !important}.jstree-proton :not(.jstree-disabled).jstree-hovered{background:#1a80ab !important;box-shadow:inset 0 0 1px #135f7f !important}.jstree-proton .jstree-disabled:hover{cursor:not-allowed}.dndFile{border:dashed 5px grey;padding:10px;text-align:center;opacity:0.5;font-size:15px;font-weight:bolder;margin:20px}.dndFileHighlighted{opacity:1 !important;border:dashed 5px #135f7f !important;color:#135f7f}.cdk-textarea-autosize{min-height:18px !important}
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index f5071c978c8e6b5845543c7f2b572d102a80469f..64d66dc99731884266a860898f8226daa7214f39 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -324,7 +324,7 @@ export const LANG_EN = {
     "eachMinute"                            : "Each minute",
     "eachMonth"                             : "Each month",
     "editAttachment"                        : "Edit the attachment",
-    "editingAttachmentInterrupted"          : "Editing of the attachment has been interrupted. <br/>><sub>Please re-edit it.</sub>",
+    "editingAttachmentInterrupted"          : "Editing of the attachment has been interrupted. <br/><sub>Please re-edit it.</sub>",
     "editModelFirst"                        : "Please edit model first",
     "edtion"                                : "Edition",
     "electronicTemplate"                    : "Electronic template",
@@ -722,7 +722,7 @@ export const LANG_EN = {
     "processType"                           : "Process type",
     "production"                            : "PRODUCTION",
     "progression"                           : "Progression",
-    "pswReseted"                            : "Password reseted",
+    "pswReseted"                            : "Password reset",
     "public"                                : "Public",
     "putInSendAttach"                       : "Put in send attachement Maileva",
     "putInSignatureBook"                    : "Put in signature book",
@@ -1408,8 +1408,8 @@ export const LANG_EN = {
     "closeFullscreen" : "Disable fullscreen",
     "hasNoEntity": "Those mails do not have initiator entity",
     "destUserSetToDefault": "Assignee will be the assignee of the initiator entity template list",
-    "resetVisaWorkflow": "The workflow will be <b>reseted</b>, this document will send back to first assignee",
-    "resetVisaWorkflowUser": "The workflow will be <b>reseted</b>, this document will send back to",
+    "resetVisaWorkflow": "The workflow will be <b>reset</b>, this circuit will be reset to first assignee",
+    "resetVisaWorkflowUser": "The workflow will be <b>reset</b>, this circuit will be reset to",
     "interruptVisaWorkflow": "The following users will not be able to target mail",
     "rejectVisaBack": "Document will be send to the previous user",
     "rejectVisaBackUser": "Document will be send back to",
@@ -1435,4 +1435,14 @@ export const LANG_EN = {
     "validateBy": "Validate by",
     "validateAvisParallel": "Your are validating an opinion request",
     "validateAvisParallelSingle": "Your are validating an opinion request of",
+    "displayWebserviceAccount": "Display webservice account",
+    "circuitNotStarted": "The workflow has not yet started",
+    "ADD": "Add",
+    "UP": "Update",
+    "DEL": "Delete",
+    "LOGIN": "Login",
+    "LOGOUT": "Logout",
+    "VIEW": "View",
+    "ERROR": "Error",
+    "systemActions": "System action(s)",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index d977e78194bfe1c7e8ac6045b911923ea033b134..526bcc6ab5edd47e18111e2fc0a9234fe371e769 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -609,7 +609,7 @@ export const LANG_FR = {
     "next"                                  : "Suivant",
     "no"                                    : "Non",
     "noAction"                              : "Aucune action",
-    "noAttachment"                          : "Sans pièce jointe",
+    "noAttachment"                          : "Aucune pièce jointe",
     "noAttachmentClickToAddOne"             : "Aucune pièce jointe disponible<br/><sub>Cliquez sur <i class=\"fa fa-paperclip fa-lg\" ></i><i class=\"fa fa-plus\"></i> pour en ajouter une.</sub>",
     "noAttachmentContact"                   : "Aucun contact attaché pour cette pièce jointe",
     "noAttachmentConversion"                : "La pièce jointe n'a pas de conversion PDF",
@@ -1447,16 +1447,16 @@ export const LANG_FR = {
     "openFullscreen" : "Activer le mode plein écran",
     "closeFullscreen" : "Désactiver le mode plein écran",
     "hasNoEntity": "Les courriers suivants n'ont pas d'entité initiatrice",
-    "destUserSetToDefault": "Le destinataire sera celui de la liste de diffusion de l'entité initiatrice",
-    "resetVisaWorkflow": "Le circuit va être <b>réinitilisé</b>, le document retournera au premier viseur",
-    "resetVisaWorkflowUser": "Le circuit va être <b>réinitilisé</b>, le document retournera à",
+    "destUserSetToDefault": "L'attributaire sera celui de la liste de diffusion de l'entité initiatrice",
+    "resetVisaWorkflow": "Le circuit va être <b>réinitialisé</b>, le circuit recommencera à partir du premier viseur",
+    "resetVisaWorkflowUser": "Le circuit va être <b>réinitialisé</b>, le circuit recommencera à partir de",
     "interruptVisaWorkflow": "Les utilisateurs suivants ne pourront pas viser le courrier",
     "rejectVisaBack": "Le courrier sera envoyé à la dernière personne ayant visé",
     "rejectVisaBackUser": "Le courrier retournera à",
     "sendToDocTo": "Vous allez transmettre ce document à",
     "endWorkflow": "Vous allez terminer le circuit",
-    "hasNoAttachmentsNotes": "Les courriers suivants n'ont ni annotation, ni pièces jointes",
-    "closeMailAddNoteMandatory": "Certains courriers n'ont ni annotation, ni pièces jointes. Merci de saisir une annotation ci-dessous, ou ajoutez une pièce jointe aux courriers.",
+    "hasNoAttachmentsNotes": "Les courriers suivants n'ont ni annotation, ni pièces jointe",
+    "closeMailAddNoteMandatory": "Merci de saisir une annotation ci-dessous ou ajouter une pièce jointe aux courriers.",
     "endedCircuit": "Circuit terminé",
     "userHasntSigned": "Le signataire n'a pas signé de document",
     "noCircuitAvailable": "Aucun circuit défini",
@@ -1464,15 +1464,25 @@ export const LANG_FR = {
     "addOpinionReason": "Veuillez renseigner le motif de l'avis",
     "opinionLimitDate": "Date limite de l'avis",
     "addOpinion": "Donner votre avis",
-    "askOpinion": "Des personnes vous demande votre avis",
+    "askOpinion": "Des personnes vous demandent votre avis",
     "askOpinionUser": "vous demande votre avis",
     "avisUserAsk": "pour avis",
     "avisUserState": "avis",
     "userNotInDiffusionList": "Vous n'êtes pas dans la liste de diffusion des avis",
-    "noOpinionLimitDate": "La date limite de l'avis n'est pas défini",
+    "noOpinionLimitDate": "La date limite de l'avis n'est pas définie",
     "noOpinionNote": "Aucun motif défini",
-    "opinionLimitDateOutdated": "La date limit de l'avis est dépassée",
+    "opinionLimitDateOutdated": "La date limite de l'avis est dépassée",
     "validateBy": "Validé par",
     "validateAvisParallel": "Vous allez valider des demandes d'avis",
     "validateAvisParallelSingle": "Vous allez valider la demande d'avis de",
+    "displayWebserviceAccount": "Afficher les comptes de webservice",
+    "circuitNotStarted": "Le circuit n'a pas encore commencé",
+    "ADD": "Ajout",
+    "UP": "Modification",
+    "DEL": "Suppression",
+    "LOGIN": "Connexion",
+    "LOGOUT": "Déconnexion",
+    "VIEW": "Visualisation",
+    "ERROR": "Erreur",
+    "systemActions": "Événement(s) système",
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index 06aec503a78fc7834be1c4a5bb11494ace371986..bcb562a846dedab43f98b92cfab98aaa7dce0ca1 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -330,7 +330,7 @@ export const LANG_NL = {
     "eachMonth"                             : "Maandelijks",
     "edirectBaskets"                        : "De geselecteerde bakjes doorsturen",
     "editAttachment"                        : "Edit the attachment", //_TO_TRANSLATE
-    "editingAttachmentInterrupted"          : "Editing of the attachment has been interrupted. <br/>><sub>Please re-edit it. </sub>", //_TO_TRANSLATE
+    "editingAttachmentInterrupted"          : "Editing of the attachment has been interrupted. <br/><sub>Please re-edit it. </sub>", //_TO_TRANSLATE
     "editModelFirst"                        : "Gelieve het model te bewerken vooraleer te bevestigen",
     "edtion"                                : "Edition", //_TO_TRANSLATE
     "electronicTemplate"                    : "Electronic template", //_TO_TRANSLATE
@@ -1431,8 +1431,8 @@ export const LANG_NL = {
     "closeFullscreen" : "Disable fullscreen", //_TO_TRANSLATE
     "hasNoEntity": "Those mails do not have initiator entity", //_TO_TRANSLATE
     "destUserSetToDefault": "Assignee will be the assignee of the initiator entity template list", //_TO_TRANSLATE
-    "resetVisaWorkflow": "The workflow will be <b>reseted</b>, this document will send back to first assignee", //_TO_TRANSLATE
-    "resetVisaWorkflowUser": "The workflow will be <b>reseted</b>, this document will send back to", //_TO_TRANSLATE
+    "resetVisaWorkflow": "The workflow will be <b>reset</b>, this circuit will be reset to first assignee", //_TO_TRANSLATE
+    "resetVisaWorkflowUser": "The workflow will be <b>reset</b>, this circuit will be reset to", //_TO_TRANSLATE
     "interruptVisaWorkflow": "The following users will not be able to target mail", //_TO_TRANSLATE
     "rejectVisaBack": "Document will be send to the previous user", //_TO_TRANSLATE
     "rejectVisaBackUser": "Document will be send back to", //_TO_TRANSLATE
@@ -1460,4 +1460,14 @@ export const LANG_NL = {
     "validateBy": "Validate by", //_TO_TRANSLATE
     "validateAvisParallel": "Your are validating an opinion request", //_TO_TRANSLATE
     "validateAvisParallelSingle": "Your are validating an opinion request of", //_TO_TRANSLATE
+    "displayWebserviceAccount": "Display webservice account", //_TO_TRANSLATE
+    "circuitNotStarted": "The workflow has not yet started", //_TO_TRANSLATE
+    "ADD": "Add", //_TO_TRANSLATE
+    "UP": "Update", //_TO_TRANSLATE
+    "DEL": "Delete", //_TO_TRANSLATE
+    "LOGIN": "Login", //_TO_TRANSLATE
+    "LOGOUT": "Logout", //_TO_TRANSLATE
+    "VIEW": "View", //_TO_TRANSLATE
+    "ERROR": "Error", //_TO_TRANSLATE
+    "systemActions": "System action(s)", //_TO_TRANSLATE
 };
diff --git a/src/frontend/plugins/sorting.pipe.ts b/src/frontend/plugins/sorting.pipe.ts
index d88119e85dd9517026faef2a6ac1eb4b0905281e..8c60342dae8b55bf019b2efd996da4f35be6b654 100755
--- a/src/frontend/plugins/sorting.pipe.ts
+++ b/src/frontend/plugins/sorting.pipe.ts
@@ -1,21 +1,28 @@
 import { Pipe } from '@angular/core';
 import { LatinisePipe } from "ngx-pipes";
+import { FunctionsService } from '../service/functions.service';
 
 @Pipe({ name: "sortBy" })
 export class SortPipe {
 
-	constructor(private latinisePipe: LatinisePipe) { }
+	constructor(
+		private latinisePipe: LatinisePipe,
+		public functions: FunctionsService
+		) { }
 
 
 	transform(array: Array<string>, args: string): Array<string> {
 		let normA = '';
 		let normB = '';
-		if (array !== undefined && array.length > 0) {
+		
+		if (!this.functions.empty(array)) {
 			array.sort((a: any, b: any) => {
 				if (args === undefined) {
 					normA = this.latinisePipe.transform(a).toLocaleLowerCase();
 					normB = this.latinisePipe.transform(b).toLocaleLowerCase();
 				} else {
+					a[args] = a[args] !== null ? a[args] : '';
+					b[args] = b[args] !== null ? b[args] : '';
 					normA = this.latinisePipe.transform(a[args]).toLocaleLowerCase();
 					normB = this.latinisePipe.transform(b[args]).toLocaleLowerCase();
 				}
diff --git a/src/frontend/service/filtersList.service.ts b/src/frontend/service/filtersList.service.ts
index 039b9598532cc93a1c49ce4196c376170a31d4bf..70c8d677efc4bfe8c89bfae45a258ce72676c030 100644
--- a/src/frontend/service/filtersList.service.ts
+++ b/src/frontend/service/filtersList.service.ts
@@ -16,6 +16,7 @@ interface listProperties {
     'subEntities': string[],
     'statuses': string[],
     'doctypes': string[],
+    'folders': string[],
 }
 
 @Injectable()
@@ -64,6 +65,7 @@ export class FiltersListService {
                 'subEntities': [],
                 'statuses': [],
                 'doctypes': [],
+                'folders': [],
             };
             this.listsProperties.push(listProperties);
             this.listsPropertiesIndex = this.listsProperties.length -1;
@@ -158,6 +160,14 @@ export class FiltersListService {
 
                 filters += '&doctypes=' + doct.join(',');
             }
+            if (this.listsProperties[this.listsPropertiesIndex].folders.length > 0) {
+                let folders: any[] = [];
+                this.listsProperties[this.listsPropertiesIndex].folders.forEach((element: any) => {
+                    folders.push(element.id);
+                });
+
+                filters += '&folders=' + folders.join(',');
+            }
         }
         return filters;
     }
diff --git a/test/unitTests/app/history/HistoryControllerTest.php b/test/unitTests/app/history/HistoryControllerTest.php
index 5af0a9b713b0ed7724b158c178163d06142b1fc9..b264094e8c9e30dd7973a608cf93629390284741 100755
--- a/test/unitTests/app/history/HistoryControllerTest.php
+++ b/test/unitTests/app/history/HistoryControllerTest.php
@@ -41,11 +41,10 @@ class HistoryControllerTest extends TestCase
         $fullRequest = $request->withQueryParams($aArgs);
 
         $response = $history->get($fullRequest, new \Slim\Http\Response());
-        $responseBody = json_decode((string)$response->getBody());
+        $responseBody = json_decode((string)$response->getBody(), true);
 
-        $this->assertInternalType('array', $responseBody->histories);
-        $this->assertInternalType('bool', $responseBody->limitExceeded);
-        $this->assertNotEmpty($responseBody->histories);
+        $this->assertInternalType('array', $responseBody['history']);
+        $this->assertNotEmpty($responseBody['history']);
     }
 
     public function testGetBatchHistory()
diff --git a/test/unitTests/app/user/UserControllerTest.php b/test/unitTests/app/user/UserControllerTest.php
index bf70378369d54b719b65a4d50facc74b7c7a588d..0e85091ef2a163ef8d0cc654d55335b0c298ba8d 100755
--- a/test/unitTests/app/user/UserControllerTest.php
+++ b/test/unitTests/app/user/UserControllerTest.php
@@ -27,9 +27,19 @@ class UserControllerTest extends TestCase
         $response     = $userController->get($request, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
 
-
         $this->assertInternalType('array', $responseBody->users);
         $this->assertNotEmpty($responseBody->users);
+
+        foreach ($responseBody->users as $value) {
+            $this->assertNotNull($value->id);
+            $this->assertInternalType('integer', $value->id);
+            $this->assertNotNull($value->user_id);
+            $this->assertNotNull($value->firstname);
+            $this->assertNotNull($value->lastname);
+            $this->assertNotNull($value->status);
+            $this->assertNotNull($value->mail);
+            $this->assertNotNull($value->loginmode);
+        }
     }
 
     public function testCreate()